<<set $player to {
name: "BigDickWorker-6969",
rank: 0,
health: 100,
maxHealth: 100,
energy: 100,
maxEnergy: 100,
lust: 0,
credits: 0,
warnings: 0,
modifications: [],
carryLimit: 6,
equipped: null,
gear: { gag: null, plug: null, chastity: null },
keycards: {},
fem: 0,
femBlockUntil: null,
pendingRankUp: false,
heartWeight: 0,
napParanoia: 0,
hydration: 100
}>>
<<set $body to {
gender: "male",
chest: 0,
ass: 0,
crotch: 0,
mouth: 0,
lactating: false,
leakCountdown: 0,
exp: { chest: 0, ass: 0, crotch: 0, mouth: 0 },
locked: { chest: 0, ass: 0, crotch: 0, mouth: 0 },
mess: { chest: [], ass: [], mouth: [] },
cageMins: 0,
cockAtrophy: 0,
bindings: [],
bindStep: 0,
linen: null
}>>
<<set $creation to { build: "BigDick", role: "Worker", number: 6969 }>>
<<set $pendingFemTransition to false>>
<<set $firstSphinxterDone to false>>
<<set $pursuit to {
active: false,
source: "",
stage: "",
secondsLeft: 0,
roomsFled: 0,
maxFlee: 4
}>>
<<set $events to {
bees: { encounters: 0, escapes: 0, stung: 0, lastDay: 0 }
}>>
<<set $beeAftermath to "">>
<<set $beeScene to null>>
<<set $tentacleScene to null>>
<<set $tentacleLoot to null>>
<<set $tentaclePair to null>>
<<set $wallScene to null>>
<<set $wallSqueeze to null>>
<<set $facilityDark to false>>
<<set $coreOutBySlime to false>>
<<set $coreOutBy to null>>
<<set $pendingCoreOutDialog to false>>
<<set $mist to { active: false, rooms: {}, exposure: 0, originId: null, lastRoom: null }>>
<<set $hangTrap to { active: false, momentum: 0, haze: 0, lastSwing: null, swings: 0, roomId: null }>>
<<set $bndScene to null>>
<<set $containment to { conditioning: 0, captures: 0, trap: null }>>
<<set $kappaFight to null>>
<<set $kappaScene to null>>
<<set $minotaurEncounter to null>>
<<set $minotaurScene to null>>
<<set $oniEncounter to null>>
<<set $oniScene to null>>
<<set $mummyScene to null>>
<<set $mummyLines to null>>
<<set $boulderKO to null>>
<<set $anubisScene to null>>
<<set $deathclawScene to null>>
<<set $deathclawRob to null>>
<<set $snakeScene to null>>
<<set $coilOutcome to null>>
<<set $dread to 0>>
<<set $dreadStep to 0>>
<<set $dreadScene to null>>
<<if not $settings>>
<<set $settings to { mediaVolume: 10, musicVolume: 10, walkSpeed: 0.5, debugMode: false, forcedTransform: true, qteStyle: 'bar', hapticsOn: false, hapticsUrl: 'ws://127.0.0.1:12345', hapticsCap: 0.7 }>>
<</if>>
<<run setup.migrateSettings(State.variables)>>
<<set $ship to {
fuel: 80,
maxFuel: 100,
cargo: [],
cargoValue: 0,
storage: [],
landed: false,
docked: false,
planetName: "",
stationName: "",
locId: "cumdump-9",
doorOpen: false,
hatchLocked: false,
upgraded: false,
upgrades: {},
terminalBootSeen: false
}>>
<<set $stations to {}>>
<<set $quota to {
day: 0,
cycle: 3,
target: setup.PROGRESS.quotaStart,
delivered: 0,
started: false
}>>
<<set $progress to {
exp: 0,
debt: setup.PROGRESS.debtStart,
expMult: 1.0
}>>
<<set $fortune to { until: 0, reads: 0, cards: [], expMult: 1, lootMult: 1, luck: 0, tag: "", verdict: "", vibe: "neutral" }>>
<<set $barn to { hired: false, mountInstalled: false, stalls: 1, bucketL: 0, horses: [], workers: [], hold: null, lastTick: 0 }>>
<<set $barnQuest to { stage: "none" }>>
<<set $barnScene to null>>
<<set $ropeScene to null>>
<<set $time to {
active: false,
hour: 8,
day: 1
}>>
<<set $codex to { items: {} }>>
<<set $bestiary to {}>>
<<set $known to { destinations: [] }>>
<<set $companion to null>>
<<set $recruits to {}>>
<<set $recruitSeq to 0>>
<<set $quests to { log: {}, eventsSeen: [] }>>
<<set $beggar to { male: 0, female: 0, fled: false }>>
<<set $slimed to { active: false, roomsCarried: 0, startMin: 0, rooted: false, term: false, sealedAt: 0, risen: false, part: null, absorbAt: null }>>
<<set $poisoned to { active: false, site: null, bites: 0, roomsCarried: 0 }>>
<<set $mia to {
metFirst: false,
relationship: 0,
gender: "female",
hasActiveDeal: false,
giftedThisVisit: null,
lastSeenDay: 0,
giftHistory: [],
officeTalkSeen: false,
roomFirstSeen: false,
cucumberSceneSeen: false,
backpackGiftSeen: false,
dildoSceneSeen: false,
syringeSceneSeen: false
}>>
<<set $tsu to {
metFirst: false,
introSeen: false,
lobbyMet: false,
showerSceneSeen: false,
workshopHeard: false,
upgradeDone: false,
giftPick: null,
giftOffer: null,
relationship: 0,
gender: "female",
name: "Tsu",
lastSeenDay: 0
}>>
<<set $pillory to { been: false, times: 0 }>>
<<set $slaveShip to null>>
<<set $intruder to null>>
<<set $altar to { totalFed: 0, gambles: 0, blessUntil: 0, met: false, lastCall: null }>>
<<set $tutorial to {
hatchHintShown: false,
recruitFileHint: false,
controlsHintShown: false,
tombGlyphHint: false
}>>
<<set $toyWatch to null>>
<<set $sidebar to { section: "main" }>>
<<set $warn to { energy: false, health: false }>>
<<set $terminalInput to "">>
<<set $terminalOutput to "">>
<<set $terminalPending to null>>
<<set $planet to null>>
<<set $cargoIndex to -1>>
<<set $storageIndex to -1>>
<<set $returnPassage to "">>
<<set $gloryPick to "">>
<<set $anubis to { met: false }>>
<<set $useMessage to "">>
<<set $snakeStatus to { poison: 0, hypno: 0, coiled: false, bitCock: 0, bitTits: 0, treated: false }>>
<<set $walk to { active: false, queue: [], target: null }>>
<<widget "ropeOption">><<nobr>>
<<set _roGate to setup.captiveCanTake()>>
<<if _roGate.ok>>
<div class="scene-advance">
<<link "Get the rope out">><<goto "SlaveShipRope">><</link>>
</div>
<<elseif setup.CAPTIVE_SHOW_REASONS.indexOf(_roGate.reason) gte 0>>
<div class="scene-advance is-off">
<span class="sa-label">Get the rope out</span>
<span class="sa-why"><<= setup.captiveTakeReason(_roGate.reason)>></span>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "sidebarTabs">><<print setup.sidebarTabsHtml()>><</widget>>
<<widget "sidebarBody">><<set _sbSec to setup.currentSidebarSection()>><<set _sbPass to (_sbSec ? _sbSec.passage : 'SidebarMain')>><<if Story.has(_sbPass)>><<include _sbPass>><</if>><</widget>>
<<widget "slimeEncounter">><<nobr>>
<<set _slMap to setup.currentWalkMap()>>
<<set _slRoom to (_slMap and _slMap.rooms ? _slMap.rooms[_slMap.current] : null)>>
<<if _slRoom>>
<<set _slArmed to ($player.equipped and setup.getItemDef($player.equipped.id) and setup.getItemDef($player.equipped.id).category eq "weapon")>>
<<set _slSlip to Math.round(setup.slimeSlipChance(_slRoom) * 100)>>
<<set _slCanFuck to setup.canFuckSlime()>>
<<set _slStrong to setup.slimeIsStrong(_slRoom)>>
<<set _slGut to setup.slimeGutCount(_slRoom)>>
<<set _slCls to (_slStrong ? 'slime-block is-strong' : 'slime-block')>>
<div @class="_slCls">
<div class="slime-block-row">
<<set _slImg to (_slStrong ? 'Images/media/slime/slime_strong.jpg' : 'Images/media/slime/slime_weak.jpg')>>
<div class="slime-block-frame"><img @src="_slImg" alt="slime"></div>
<div class="slime-block-text">
<div class="slime-block-title"><<if _slStrong>>STRONG SLIME<<else>>SLIME<</if>></div>
<div class="slime-block-desc"><<if _slStrong>>This one's eaten its way up to something the size of a man and then some, a wall of cold muck<<if _slGut gt 0>> with rocks and junk and somebody's gear turning slow inside it<<else>> with nothing solid left in it, whatever it swallowed already gone to soup<</if>>, two red lights buried deep. A plug won't stop it. It just peels what it wants off you.<<else>><<if _slRoom.slimeSplits and _slRoom.slimeSplits gt 0>>There are <<print _slRoom.slimeSplits + 1>> of them now, the halves you cut already crawling back toward each other, the whole wet floor of the room moving. <</if>>It sits in the low part of the room, slow and huge, two pale lights set deep in the muck watching you, and it's filling the only way through. Slimes are slow. You're not. Probably.<</if>></div>
</div>
</div>
<div class="slime-block-links" id="slime-opts">
<<set _slFwd to setup.slimeCanSlipForward(_slMap)>>
<<if not _slFwd>>
<div class="slime-link-off">It's parked against a sealed door<span class="slime-link-off-hint">nowhere past it to slip. Back out, or put it down</span></div>
<<else>>
<div class="ship-action slime-link"><<link `'<span class="action-label">' + (_slStrong ? 'Squeeze past it' : 'Slip past it') + '</span><span class="action-hint">' + _slSlip + '% clean. ' + (_slStrong ? 'Too big to plug. Barge through and hope.' : 'A plug helps. A full bag or low energy hurts.') + '</span>'`>>
<<replace "#slime-opts">>
<<for _spi, _spx range setup.slimeForwardExits(setup.currentWalkMap())>>
<<capture _spx>>
<div class="ship-action slime-link">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_spx.dir) + '</span> ' + setup.dirLabel(_spx.dir) + '</span><span class="action-hint">' + _spx.label + '</span>'`>>
<<run setup.slimeSlipToward(_spx.dir)>>
<<goto `State.passage`>>
<</link>>
</div>
<</capture>>
<</for>>
<</replace>>
<<timed 20ms>><<run setup.decorateActionHotkeys()>><</timed>>
<</link>></div>
<</if>>
<<if _slArmed>>
<<set _slWpnCh to setup.equippedWeaponCharges()>>
<div class="ship-action slime-link is-top"><<link `'<span class="action-label">Strike its core with your ' + $player.equipped.name + '</span><span class="action-hint">Green kills it clean. Orange spends a charge. Red and it has you.' + (_slWpnCh ? ' · ' + _slWpnCh.charges + '/' + _slWpnCh.max + ' charges' : '') + '</span>'`>>
<<run setup.slimeStrikeQte()>>
<</link>></div>
<</if>>
<<if _slCanFuck and not _slStrong>>
<div class="ship-action slime-link is-top"><<link '<span class="action-label">Shape it and fuck it</span><span class="action-hint">Your plug seals you. You top it instead.</span>'>>
<<set _slM to setup.currentWalkMap()>><<set _slR to _slM.rooms[_slM.current]>>
<<run setup.playSound('slap', { volume: 0.5 })>><<run setup.openSlimeFuckDialog(false)>><<run setup.slimeDefeat(_slR)>>
<<goto `State.passage`>>
<</link>></div>
<</if>>
<<if not _slArmed and not (_slCanFuck and not _slStrong)>>
<div class="slime-link-off"><<if _slStrong>>Nothing on you can put it down<span class="slime-link-off-hint">A weapon lets you strike its core. Slip past for now.</span><<else>>No weapon to strike the core<span class="slime-link-off-hint">draw a weapon to strike it, or plug up to top a weak one</span><</if>></div>
<</if>>
<div class="ship-action slime-link is-back"><<link '<span class="action-label">Back out the way you came</span><span class="action-hint">Don\'t risk it</span>'>>
<<set _slM to setup.currentWalkMap()>>
<<if _slM.previousRoom and _slM.rooms[_slM.previousRoom]>><<set _slM.current to _slM.previousRoom>><<else>><<set _slM.current to "r0">><</if>>
<<if typeof setup.tickHydration eq "function">><<run setup.tickHydration(true)>><</if>>
<<goto `State.passage`>>
<</link>></div>
</div>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "bunkMenu">><<nobr>>
<div id="bunk-slot">
<<set _bunkIco to $ship.upgraded ? 'bed' : 'bunk'>>
<div class="ship-action bunk-approach"><<link `'<img class="action-icon" src="Images/ui/minimap/' + _bunkIco + '.png" alt=""><span class="action-label">Approach the bunk</span><span class="action-hint">Nap, wait, or bed down</span>'`>>
<<replace "#bunk-slot">>
<<if setup.canNap()>>
<div class="ship-action"><<link '<img class="action-icon" src="Images/ui/minimap/nap.png" alt=""><span class="action-label">Take a nap</span><span class="action-hint">Rest to full. A few hours slip by.</span>'>>
<<set _nr to setup.doNap()>>
<<set _napMsg to 'You drop onto the bunk and come to sharper. <b>Energy full.</b> ' + setup.formatDuration(_nr.minutes) + ' gone.'>>
<<if _nr.paranoia gte setup.NAP_PARANOIA_CAP>><<set _napMsg += ' You\'re running on catnaps now and it shows. You couldn\'t doze off again if you tried. Time to actually sleep.'>><</if>>
<<run setup.showUseToast(_napMsg, { variant: 'hint', dwell: 4600 })>>
<<goto `State.passage`>>
<</link>></div>
<<elseif setup.napLockedByParanoia()>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/nap.png" alt=""><span class="action-label">Take a nap</span><span class="action-hint"> — too wired from catnapping; only real sleep fixes it</span></div>
<<else>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/nap.png" alt=""><span class="action-label">Take a nap</span><span class="action-hint"> — not tired enough to nap</span></div>
<</if>>
<<if $companion>>
<<if setup.companionIsOut()>>
<div class="ship-action"><<link `'<img class="action-icon" src="Images/ui/minimap/wait.png" alt=""><span class="action-label">Wait for ' + $companion.name + '</span><span class="action-hint">Sit tight until ' + $companion.name + ' makes it back to the ship</span>'`>>
<<set _wr to setup.doWaitForCompanion()>>
<<if _wr.ok>>
<<run setup.showUseToast('<b>' + _wr.name + '</b> makes it back and climbs aboard. ' + setup.formatDuration(_wr.minutes) + ' passed.', { variant: 'hint' })>>
<<elseif _wr.reason eq "ko" or _wr.reason eq "caught">>
<<run setup.showUseToast('<b>' + _wr.name + '</b> hit trouble out there and isn\'t making it back alone. Go find them.', { dwell: 4200 })>>
<<else>>
<<run setup.showUseToast('Still no sign of them.', { variant: 'hint' })>>
<</if>>
<<goto `State.passage`>>
<</link>></div>
<<else>>
<<set _cRow to setup.companionShipRow()>>
<<if _cRow and _cRow.live>>
<div class="ship-action"><<link `'<img class="action-icon" src="Images/ui/minimap/bunk.png" alt=""><span class="action-label">' + _cRow.label + '</span><span class="action-hint">' + _cRow.hint + '</span>'`>><<set $returnPassage to State.passage>><<goto _cRow.passage>><</link>></div>
<<elseif _cRow>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/bunk.png" alt=""><span class="action-label"><<print _cRow.label>></span><span class="action-hint"> — <<print _cRow.hint>></span></div>
<</if>>
<</if>>
<</if>>
<<if setup.canSleepNow()>>
<div class="ship-action"><<link '<img class="action-icon" src="Images/ui/minimap/sleep_moon.png" alt=""><span class="action-label">Sleep</span><span class="action-hint">Bed down and skip to morning</span>'>><<goto "Sleep">><</link>></div>
<<else>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/sleep_moon.png" alt=""><span class="action-label">Sleep</span><span class="action-hint"> — too early, bed down after 15:00</span></div>
<</if>>
<<timed 20ms>><<run setup.decorateActionHotkeys()>><</timed>>
<</replace>>
<</link>></div>
</div>
<</nobr>><</widget>>
<<widget "miaObjective">><<nobr>>
<<set _obj to setup.miaObjective()>>
<<if _obj>><<print setup.questPanelHtml(_obj, '')>><</if>>
<<if $known and $known.destinations and $known.destinations.indexOf('labrotoria-69') gte 0 and (not $tsu or not $tsu.metFirst)>>
<<print setup.questPanelHtml({
title: 'CIVILIAN LEAD',
goal: 'An unlisted dock, still pinging.',
dest: { name: 'Labrotoria-69', type: 'planet', planets: ['labrotoria-69'] }
}, 'is-tsu')>>
<</if>>
<<set _barnObj to setup.barnPanelObjective()>>
<<if _barnObj>><<print setup.questPanelHtml(_barnObj, 'is-barn')>><</if>>
<<set _recObj to setup.recruitObjective()>>
<<if _recObj>>
<<print setup.questPanelHtml(_recObj, 'is-rec')>>
<<if ['Ship','Cockpit','SleepingQuarters','Terminal','Station'].includes(passage())>>
<<run setup.showHintOnce('recruitFileHint', "psst, that personnel file you're carrying? hail them straight from the ship terminal with <code>/contact</code>.")>>
<</if>>
<</if>>
<</nobr>><</widget>>
<<widget "creditChip">><<nobr>>
<<set _ccAmount to _args[0]>>
<<set _ccLabel to _args[1] or ''>>
<<print '<span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + _ccAmount + (_ccLabel ? ' ' + _ccLabel : '') + '</span>'>>
<</nobr>><</widget>>
<<widget "statbar">><<nobr>>
<<set _label to _args[0]>>
<<set _cur to _args[1]>>
<<set _max to _args[2]>>
<<set _color to _args[3]>>
<<set _pct to Math.floor((_cur / _max) * 100)>>
<<set _iconMap to { HP: 'hp', EN: 'energy', LUST: 'lust' }>>
<<set _icon to _iconMap[_label]>>
<<set _ratio to (_cur / _max)>>
<<if _label === 'HP'>>
<<if _ratio gte 0.66>>
<<set _tierColor to '#3fb84a'>>
<<elseif _ratio gte 0.33>>
<<set _tierColor to '#dd9933'>>
<<else>>
<<set _tierColor to '#cc3344'>>
<</if>>
<<elseif _label === 'EN'>>
<<set _tierColor to '#e6b035'>>
<<elseif _label === 'LUST'>>
<<if _ratio gte 0.66>>
<<set _tierColor to '#c8377f'>>
<<elseif _ratio gte 0.33>>
<<set _tierColor to '#e26aa6'>>
<<else>>
<<set _tierColor to '#f5a3c8'>>
<</if>>
<<else>>
<<set _tierColor to _color>>
<</if>>
<<set _html to '<div class="stat-row">'>>
<<if _icon>>
<<set _html += '<img class="stat-icon" src="Images/ui/' + _icon + '.png" alt="' + _label + '">'>>
<<else>>
<<set _html += '<span class="stat-label">' + _label + '</span>'>>
<</if>>
<<set _html += '<div class="stat-bar-bg has-segments"><div class="stat-bar-fill" style="width:' + _pct + '%;background:' + _tierColor + ';"></div></div>'>>
<<set _html += '<span class="stat-value">' + Math.round(_cur) + '</span>'>>
<<set _html += '</div>'>>
<<print _html>>
<</nobr>><</widget>>
<<widget "tick">><<nobr>>
<<set _mins to (_args[0] !== undefined ? _args[0] : 5)>>
<<run setup.advanceMinutes(_mins)>>
<</nobr>><</widget>>
<<widget "hangUI">><<nobr>>
<<set _canEsc to setup.hangCanEscape()>>
<div class="hang-meter-row">
<span class="hang-meter-label">MOMENTUM</span>
<div class="stat-bar-bg hang-segs"><div class="stat-bar-fill hang-fill" @style="'width:' + setup.hangMomentumPct() + '%'"></div></div>
<span class="hang-meter-val"><<print setup.hangMomentumPct()>></span>
</div>
<div class="hang-clock">the blood keeps pooling behind your eyes</div>
<div class="hang-swings">
<<if _canEsc>>
<div class="ship-action hang-swing-left disabled"><span class="kb-hint hang-kb">A</span><span class="action-label">Throw your weight left</span></div>
<div class="ship-action hang-swing-right disabled"><span class="kb-hint hang-kb">D</span><span class="action-label">Throw your weight right</span></div>
<<else>>
<div class="ship-action hang-swing-left"><<link '<span class="kb-hint hang-kb">A</span><span class="action-label">Throw your weight left</span>'>><<run setup.hangSwing("l")>><<if setup.hangTrapKO()>><<run setup.hangKnockout()>><<goto "HangKnockout">><<else>><<goto "HangingTrap">><</if>><</link>></div>
<div class="ship-action hang-swing-right"><<link '<span class="kb-hint hang-kb">D</span><span class="action-label">Throw your weight right</span>'>><<run setup.hangSwing("r")>><<if setup.hangTrapKO()>><<run setup.hangKnockout()>><<goto "HangKnockout">><<else>><<goto "HangingTrap">><</if>><</link>></div>
<</if>>
</div>
<<if _canEsc>>
<div class="ship-action hang-escape"><<link '<span class="kb-hint hang-kb">E</span><span class="action-label">Swing up and wrench your hands free</span>'>><<run setup.hangBreakFree()>><<goto "HangFree">><</link>></div>
<<else>>
<div class="hang-escape-soon">Alternate left and right to build momentum</div>
<</if>>
<</nobr>><</widget>>
<<widget "roomImage">><<nobr>>
<<set _rtype to _args[0]>>
<<set _path to setup.roomImagePath(_rtype)>>
<<set _cls to 'room-image'>>
<<set _isShip to (_rtype and _rtype.toString().indexOf('ship_') === 0)>>
<<set _isTsu to (_rtype and _rtype.toString().indexOf('tsu_') === 0)>>
<<set _isAltar to (_rtype and _rtype.toString().indexOf('altar/altar_interior') === 0)>>
<<set _safe to (_isShip or _isTsu or _isAltar or _rtype === 'station_interior' or _rtype === 'mia_room' or _rtype === 'barn_interior')>>
<<if not _safe and setup.isDarkContext()>>
<<if setup.hasFlashlight()>>
<<set _cls to _cls + ' facility-dark has-torch'>>
<<else>>
<<set _cls to _cls + ' facility-dark'>>
<</if>>
<</if>>
<<set _mistHtml to (typeof setup.mistHtmlHere === 'function') ? setup.mistHtmlHere() : ''>>
<<if not _safe>>
<<set _cls to _cls + setup.weatherRoomClass()>>
<<set _mistHtml to _mistHtml + setup.weatherRoomHtml()>>
<<elseif _rtype === 'barn_interior' and setup.pinkMoonActive()>>
<<set _cls to _cls + ' wx-pinkmoon'>>
<<set _mistHtml to _mistHtml + '<div class="wx-pink-veil"></div>'>>
<</if>>
<<print '<div class="' + _cls + '" style="background-image: url(\'' + _path + '\');"><div class="room-image-veil"></div><div class="room-image-torch"></div>' + _mistHtml + '</div>'>>
<</nobr>><</widget>>
<<widget "bodyPanel">><<nobr>>
<<if def $body>>
<<set _g to ($body.gender || 'male')>>
<<set _gIcon to 'Images/ui/gender_' + _g + '.png'>>
<<set _bp to '<div class="body-panel">'>>
<<set _bp += '<div class="panel-title">BODY<span class="panel-count"><img class="gender-icon" src="' + _gIcon + '" alt="' + _g + '">' + _g.toUpperCase() + '</span></div>'>>
<<set _bp += '<div class="body-grid">'>>
<<for _i, _part range setup.BODY_PARTS>>
<<set _stage to $body[_part] || 0>>
<<set _effStage to setup.effectiveStage(_part)>>
<<set _isTemp to (_effStage !== _stage)>>
<<if _part === 'crotch'>>
<<set _imgSrc to 'Images/body/crotch_' + _g + '_' + _effStage + '.png'>>
<<set _wearingCondom to (_g === 'male' and $player.gear and $player.gear.chastity and $player.gear.chastity.id === 'condom')>>
<<if _wearingCondom and _effStage lte 2>>
<<set _imgSrc to 'Images/body/crotch_male_condom_' + _effStage + '.png'>>
<<elseif _g === 'male' and setup.isCaged()>>
<<if ($player.lust or 0) gte setup.CROTCH_LUST_THRESHOLD and setup.CAGE_LUST_ART_COUNT gt 0>>
<<set _imgSrc to 'Images/body/crotch_male_cage_lust_' + setup.bodyArtVariant($body, 'cagelust', setup.CAGE_LUST_ART_COUNT) + '.png'>>
<<elseif setup.CAGE_CROTCH_ART[_effStage]>>
<<set _imgSrc to 'Images/body/crotch_male_cage_' + _effStage + '_' + setup.bodyArtVariant($body, 'cage' + _effStage, setup.CAGE_CROTCH_ART[_effStage]) + '.png'>>
<</if>>
<<elseif _g === 'male' and not _wearingCondom and ($player.lust or 0) gte setup.CROTCH_LUST_THRESHOLD and setup.CROTCH_LUST_ART[_effStage]>>
<<set _imgSrc to 'Images/body/crotch_male_lust_' + _effStage + '_' + setup.bodyArtVariant($body, 'lust' + _effStage, setup.CROTCH_LUST_ART[_effStage]) + '.png'>>
<</if>>
<<else>>
<<set _imgSrc to 'Images/body/' + _part + '_' + _effStage + '.png'>>
<</if>>
<<set _stageWord to setup.bodyStageLabel(_part, _stage, _g)>>
<<set _labelWord to setup.bodyPartName(_part, _g, _stage).toUpperCase()>>
<<set _prog to setup.bodyPartProgress(_part)>>
<<set _maleCrotch to (_part === 'crotch' and _g === 'male')>>
<<set _dotN to (_part === 'crotch' ? 5 : 6)>>
<<set _swLo to Math.min(_stage, _effStage)>>
<<set _swHi to Math.max(_stage, _effStage)>>
<<set _cap to setup.bodyMaxStage(_part, _g)>>
<<set _dotsHtml to ''>>
<<for _di to 0; _di lt _dotN; _di++>>
<<set _cls to 'dot'>>
<<set _fill to ''>>
<<set _dstyle to '--dc:' + setup.bodyDotColor(_g, _di, _dotN) + ';'>>
<<if _maleCrotch>>
<<if _di lte _stage>><<set _cls += ' is-filled is-locked'>><</if>>
<<elseif _di gt _cap>>
<<set _cls += ' is-gated'>>
<<else>>
<<if _di lte _stage>><<set _cls += ' is-filled'>><</if>>
<<if _di lte _prog.locked>><<set _cls += ' is-locked'>><</if>>
<<if _di === _stage and _stage lt _cap and _prog.locked lt _stage>><<set _cls += ' is-current'>><</if>>
<<if _di === (_stage + 1) and _stage lt _cap>><<set _fill to '<span class="dot-fill" style="width:' + Math.round(_prog.ratio * 100) + '%"></span>'>><<set _cls += ' has-exp'>><</if>>
<</if>>
<<if _isTemp and _di gt _swLo and _di lte _swHi>><<set _cls += ' is-swell'>><<set _fill to ''>><<set _cls to _cls.replace(' has-exp', '')>><</if>>
<<set _dotsHtml += '<span class="' + _cls + '" style="' + _dstyle + '">' + _fill + '</span>'>>
<</for>>
<<set _blessOn to (setup.altarBlessed() and (_part === 'chest' or _part === 'ass'))>>
<<set _bp += '<div class="body-slot' + (_blessOn ? ' is-blessed' : '') + '"'
+ (_blessOn ? ' title="Her blessing — this one takes deeper"' : '') + '>'>>
<<set _bp += '<img src="' + _imgSrc + '" alt="' + _part + '">'>>
<<set _bandSrc to null>>
<<if setup.linenFull()>>
<<set _bandSrc to 'bandage_overlay_heavy'>>
<<elseif setup.hasBinding(_part)>>
<<set _bandSrc to 'bandage_overlay'>>
<<elseif setup.linenWorn()>>
<<set _bandSrc to 'bandage_overlay_light'>>
<</if>>
<<if _bandSrc>>
<<set _bp += '<img class="bandage-overlay" src="Images/body/' + _bandSrc + '.png" alt="">'>>
<</if>>
<<if setup.hasBinding(_part)>>
<<set _bp += '<span class="body-slot-unwrap" data-bindsite="' + _part + '" title="Tear the linen off your ' + setup.bindingSiteLabel(_part) + ' — ' + setup.BINDING_TEAR_MINUTES + ' min, and it makes noise"></span>'>>
<</if>>
<<if _part !== 'crotch' and $body.mess and $body.mess[_part] and $body.mess[_part].length>>
<<set _splats to $body.mess[_part]>>
<<set _bp += '<div class="body-slot-fluid">'>>
<<set _dirtN to 0>>
<<for _si to 0; _si lt _splats.length; _si++>>
<<set _sp to _splats[_si]>>
<<if _sp.f eq 'sand'>>
<<set _dirtN += 1>>
<<else>>
<<set _bp += '<img class="cum-splat is-' + _sp.f + '" src="Images/body/cum/cum_' + _sp.s + '.png" alt="" style="left:' + _sp.x + '%;top:' + _sp.y + '%;width:' + _sp.w + '%;transform:translate(-50%,-22%) rotate(' + _sp.r + 'deg)' + (_sp.fl ? ' scaleX(-1)' : '') + '">'>>
<</if>>
<</for>>
<<if _dirtN gt 0>>
<<set _bp += '<img class="dirt-overlay" src="Images/body/dirt_overlay.png" alt="" style="opacity:' + Math.min(0.9, 0.35 + _dirtN * 0.14).toFixed(2) + '">'>>
<</if>>
<<set _bp += '</div>'>>
<</if>>
<<set _bp += '<div class="body-slot-overlay">'>>
<<set _bp += '<div class="body-slot-row">'>>
<<set _bp += '<span class="body-slot-stage" style="--dc:' + setup.bodyDotColor(_g, _stage, _dotN) + ';">' + _stageWord + '</span>'>>
<<set _bp += '<span class="body-slot-label">' + _labelWord + '</span>'>>
<<set _bp += '</div>'>>
<<set _bp += '<div class="body-slot-dots">' + _dotsHtml + '</div>'>>
<<set _bp += '</div>'>>
<<set _bp += '</div>'>>
<</for>>
<<set _bp += '</div></div>'>>
<<print _bp>>
<</if>>
<</nobr>><</widget>>
<<widget "weaponSlot">><<nobr>>
<<if $player.equipped>>
<<if setup.inBlockingScene()>>
<div class="weapon-slot filled is-frozen" @title="$player.equipped.name">
<<print '<img src="Images/items/' + $player.equipped.id + '.png" alt="' + $player.equipped.name + '"><div class="weapon-slot-info"><div class="weapon-slot-label">Equipped</div><div class="weapon-slot-name">' + $player.equipped.name + '</div>' + setup.weaponChargeBarHtml() + '</div>'>>
</div>
<<else>>
<div class="weapon-slot filled" @title="`'Click to unholster ' + $player.equipped.name`">
<<link `'<img src="Images/items/' + $player.equipped.id + '.png" alt="' + $player.equipped.name + '"><div class="weapon-slot-info"><div class="weapon-slot-label">Equipped</div><div class="weapon-slot-name">' + $player.equipped.name + '</div>' + setup.weaponChargeBarHtml() + '</div>'`>>
<<run setup.unequip()>>
<<goto `State.passage`>>
<</link>>
<span class="kb-hint kb-hint-abs">Q</span>
</div>
<</if>>
<<else>>
<div class="weapon-slot">
<img src="Images/items/no_weapon.png" alt="no weapon">
<div class="weapon-slot-info"><div class="weapon-slot-label">Equipped</div><div class="weapon-slot-name">nothing</div></div>
<<if setup.companionFirstEquippableInCargo and setup.companionFirstEquippableInCargo()>><span class="kb-hint kb-hint-abs">Q</span><</if>>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "gearPanel">><<nobr>>
<<if def $player and $player.gear>>
<<set _slots to ['gag', 'plug', 'chastity']>>
<div class="gear-panel">
<div class="panel-title">WORN</div>
<<if ($tentacleScene or $wallScene) and setup.inBlockingScene()>>
<div class="gear-bound-overlay">BOUND</div>
<<else>>
<<set _gearFrozen to setup.inBlockingScene()>>
<div class="gear-grid">
<<for _gi, _gslot range _slots>>
<<capture _gslot>>
<<set _worn to $player.gear[_gslot]>>
<<if _worn>>
<<set _gIconSrc to 'Images/items/' + _worn.id + '.png'>>
<<set _gAlt to _worn.name>>
<span class="gear-slot filled" @title="_worn.name">
<<if _gearFrozen>>
<<print '<img src="' + _gIconSrc + '" alt="' + _gAlt + '">'>>
<<else>>
<<link `'<img src="' + _gIconSrc + '" alt="' + _gAlt + '">'`>>
<<run setup.unequipGear(_gslot)>>
<<goto `passage()`>>
<</link>>
<</if>>
</span>
<<else>>
<span class="gear-slot empty">
<img src="Images/items/no_gear.png" alt="no gear">
</span>
<</if>>
<</capture>>
<</for>>
</div>
<</if>>
<<if setup.isPoisoned()>>
<div class="sidebar-slime is-poison">
<div class="sidebar-slime-head"><img class="sidebar-slime-icon" src="Images/ui/minimap/poison.png" alt=""><span class="sidebar-slime-title">POISONED</span></div>
<div class="sidebar-slime-body"><<print setup.poisonSidebarLine()>></div>
<<set _pdo to setup.poisonDrawOptions()>>
<<if _pdo.length and _pdo[0].ok>>
<<link `'<span class="slime-push"><img src="Images/ui/lips.png" alt="">' + _pdo[0].label + '</span>'`>><<run setup.openPoisonDrawDialog()>><<goto `passage()`>><</link>>
<<elseif _pdo.length>>
<<print setup.poisonBlockedHtml()>>
<</if>>
</div>
<</if>>
<<if setup.isSlimed()>>
<div class="sidebar-slime">
<div class="sidebar-slime-head"><img class="sidebar-slime-icon" src="Images/ui/minimap/slime.png" alt=""><span class="sidebar-slime-title">SLIMED</span></div>
<div class="sidebar-slime-body"><<print setup.slimeSidebarLine()>></div>
<<if setup.canExpelSlime()>>
<<link `'<span class="slime-push"><img src="Images/ui/poop.png" alt="">Push it out</span>'`>><<run setup.playSound('step_gravel', { volume: 0.4 })>><<run setup.openSlimeExpelDialog()>><<goto `passage()`>><</link>>
<<elseif setup.slimeExpelBlockedReason()>>
<<print setup.slimeExpelBlockedHtml()>>
<</if>>
</div>
<</if>>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "compBodyPanel">><<nobr>>
<<if $companion and $companion.body and ($companion.aboard or setup.companionEarshot($companion))>>
<<set _cg to ($companion.body.gender || 'female')>>
<<set _cgIcon to 'Images/ui/gender_' + _cg + '.png'>>
<<set _cbp to '<div class="body-panel">'>>
<<set _cbp += '<div class="panel-title">BODY<span class="panel-count"><img class="gender-icon" src="' + _cgIcon + '" alt="' + _cg + '">' + _cg.toUpperCase() + '</span></div>'>>
<<set _cbp += '<div class="body-grid">'>>
<<for _ci, _cpart range setup.BODY_PARTS>>
<<set _cstage to $companion.body[_cpart] || 0>>
<<set _cimg to setup.companionBodyImagePath($companion, _cpart)>>
<<set _cword to setup.bodyStageLabel(_cpart, _cstage, _cg)>>
<<set _ccap to setup.bodyMaxStage(_cpart, _cg, ($companion.body.fem || 0))>>
<<set _cdots to ''>>
<<for _cdi to 0; _cdi lt 5; _cdi++>>
<<set _cdotCls to 'dot'>>
<<if _cdi gt _ccap>>
<<set _cdotCls += ' is-gated'>>
<<elseif _cdi lte _cstage>>
<<set _cdotCls += ' is-filled'>>
<</if>>
<<set _cdots += '<span class="' + _cdotCls + '" style="--dc:' + setup.bodyDotColor(_cg, _cdi, 5) + '"></span>'>>
<</for>>
<<set _cbp += '<div class="body-slot">'>>
<<set _cbp += '<img src="' + _cimg + '" alt="' + _cpart + '">'>>
<<set _cbp += '<div class="body-slot-overlay">'>>
<<set _cbp += '<div class="body-slot-row">'>>
<<set _cbp += '<span class="body-slot-stage" style="--dc:' + setup.bodyDotColor(_cg, _cstage, 5) + ';">' + _cword + '</span>'>>
<<set _cbp += '<span class="body-slot-label">' + setup.bodyPartName(_cpart, _cg, _cstage).toUpperCase() + '</span>'>>
<<set _cbp += '</div>'>>
<<set _cbp += '<div class="body-slot-dots">' + _cdots + '</div>'>>
<<set _cbp += '</div>'>>
<<set _cbp += '</div>'>>
<</for>>
<<set _cbp += '</div></div>'>>
<<print _cbp>>
<</if>>
<</nobr>><</widget>>
<<widget "compWeaponSlot">><<nobr>>
<<if $companion.equipped>>
<div class="weapon-slot filled" @title="$companion.equipped.name">
<<print '<img src="Images/items/' + $companion.equipped.id + '.png" alt="' + $companion.equipped.name + '"><div class="weapon-slot-info"><div class="weapon-slot-label">Equipped</div><div class="weapon-slot-name">' + $companion.equipped.name + '</div></div>'>>
</div>
<<else>>
<div class="weapon-slot">
<img src="Images/items/no_weapon.png" alt="no weapon">
<div class="weapon-slot-info"><div class="weapon-slot-label">Equipped</div><div class="weapon-slot-name">nothing</div></div>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "compCargoPanel">><<nobr>>
<<if $companion and $companion.cargo>>
<<set _ccap to ($companion.carryLimit || 6)>>
<<set _cused to $companion.cargo.length>>
<div class="inv-panel comp-pack">
<div class="panel-title">PACK<span class="panel-count"><<print _cused>>/<<print _ccap>></span></div>
<div class="inv-grid">
<<for _cci to 0; _cci lt _ccap; _cci++>>
<<if _cci lt _cused>>
<<set _citem to $companion.cargo[_cci]>>
<div class="inv-slot filled">
<span class="inv-icon-wrap"><img @src="'Images/items/' + _citem.id + '.png'" @alt="_citem.name"></span>
<div class="inv-meta">
<span class="inv-name" @title="_citem.name"><<print _citem.name>></span>
<<if _citem.value>><span class="inv-val">$<<print _citem.value>></span><</if>>
</div>
</div>
<<else>>
<div class="inv-slot empty">EMPTY</div>
<</if>>
<</for>>
</div>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "compGearPanel">><<nobr>>
<<if $companion and $companion.gear>>
<<set _cslots to ['gag', 'plug', 'chastity']>>
<div class="gear-panel">
<div class="panel-title">WORN</div>
<div class="gear-grid">
<<for _cgi, _cgslot range _cslots>>
<<capture _cgslot>>
<<set _cworn to $companion.gear[_cgslot]>>
<<if _cworn>>
<span class="gear-slot filled" @title="_cworn.name">
<<if setup.companionCanReachGear()>>
<<link `'<img src="Images/items/' + _cworn.id + '.png" alt="' + _cworn.name + '">'`>>
<<run setup.companionUnequipGear(_cgslot)>>
<<goto `passage()`>>
<</link>>
<<else>>
<<print '<img src="Images/items/' + _cworn.id + '.png" alt="' + _cworn.name + '">'>>
<</if>>
</span>
<<else>>
<span class="gear-slot empty">
<img src="Images/items/no_gear.png" alt="no gear">
</span>
<</if>>
<</capture>>
<</for>>
</div>
</div>
<</if>>
<</nobr>><</widget>>
<<widget "inventoryPanel">><<nobr>>
<<set _slots to setup.getCargoSlots()>>
<<set _used to $ship.cargo.length>>
<<set _frozen to setup.inBlockingScene()>>
<<set _invPanelCls to _frozen ? 'inv-panel is-frozen' : 'inv-panel'>>
<div @class="_invPanelCls">
<div class="panel-title">CARGO<span class="panel-count"><<print _used>>/<<print _slots>></span><<if _frozen>><span class="panel-sealed">SEALED</span><</if>></div>
<div class="inv-grid">
<<for _i to 0; _i lt _slots; _i++>>
<<capture _i>>
<<if _i lt _used>>
<<set _item to $ship.cargo[_i]>>
<<set _def to setup.getItemDef(_item.id)>>
<<set _name to (typeof _item === 'string') ? _item : _item.name>>
<<set _val to (typeof _item === 'string') ? '' : (_item.value || 0)>>
<<set _hasCharges to (typeof _item.charges is 'number')>>
<<set _isUsable to (_def and _def.usable)>>
<<set _slotCls to (_item.locked ? 'inv-slot filled is-locked' : 'inv-slot filled')>>
<<if _item.cursed>><<set _slotCls to _slotCls + ' is-cursed'>><</if>>
<<set _maxSeg to (_item.maxCharges || _item.charges || 1)>>
<<set _segCount to Math.min(_maxSeg, 8)>>
<<set _segFull to (_hasCharges) ? Math.round((_item.charges / _maxSeg) * _segCount) : 0>>
<<set _bar to ''>>
<<for _cI to 0; _cI lt _segCount; _cI++>>
<<if _cI lt _segFull>>
<<set _bar += '<span class="chg-seg full"></span>'>>
<<else>>
<<set _bar += '<span class="chg-seg empty"></span>'>>
<</if>>
<</for>>
<<set _iconHtml to '<span class="inv-icon-wrap">' + (_item.cursed ? '<span class="cursed-star" title="Cursed">\u2605</span>' : '') + '<img draggable="false" src="' + setup.itemIconSrc(_item) + '" alt="' + _name + '"></span>'>>
<<set _qkChar to (_item.id === 'medkit') ? 'H' : ''>>
<div @class="_slotCls" @data-inv-idx="_i" draggable="true">
<<if _qkChar>><span class="kb-hint kb-hint-abs kb-hint-tl"><<print _qkChar>></span><</if>>
<<set _lockChipCls to _item.locked ? 'inv-lock-toggle is-locked' : 'inv-lock-toggle'>>
<<set _lockChipTitle to _item.locked ? 'Locked. Stays in your bag when you board.' : 'Unlocked. Auto-dumps to ship storage on board.'>>
<<set _lockChipText to _item.locked ? 'LOCKED' : 'LOCK'>>
<<capture _i>>
<<link `'<span class="' + _lockChipCls + '" title="' + _lockChipTitle + '">' + _lockChipText + '</span>'`>>
<<if not setup.inBlockingScene()>>
<<run setup.toggleCargoLock(_i)>>
<<goto `State.passage`>>
<</if>>
<</link>>
<</capture>>
<<link _iconHtml>>
<<if not setup.inBlockingScene()>>
<<set $cargoIndex to _i>>
<<goto "CargoItem">>
<</if>>
<</link>>
<div class="inv-meta">
<span class="inv-name" @title="_name"><<print _name>></span>
<<if _val>><span class="inv-val">$<<print _val>></span><</if>>
</div>
<div class="inv-action-row">
<<if _hasCharges>>
<div class="chg-bar" title="`_item.charges + ' / ' + _maxSeg + ' charges'`"><<print _bar>></div>
<<else>>
<div class="chg-bar-spacer"></div>
<</if>>
<<if _isUsable>>
<<set _btnText to (_def.useLabelShort or 'USE')>>
<<if _frozen>>
<span class="chg-use is-disabled" title="Can't get to your bag right now"><<print _btnText>></span>
<<elseif setup.canUseItem(_item.id, _item)>>
<<link `'<span class="chg-use">' + _btnText + '</span>'`>>
<<set _useTarget to $ship.cargo[_i]>>
<<if _useTarget>>
<<run setup.playItemSound(_useTarget.id)>>
<<set _msg to setup.useItem(_useTarget.id, _i)>>
<<if not $_useRedirect>><<set $useMessage to (typeof _msg is 'string' ? _msg : 'Nothing happens.')>><</if>>
<</if>>
<<set $cargoIndex to -1>>
<<if $_useRedirect>><<set _rd to $_useRedirect>><<set $_useRedirect to null>><<goto _rd>>
<<else>><<goto `State.passage`>><</if>>
<</link>>
<<else>>
<span class="chg-use is-disabled" title="Not usable right now"><<print _btnText>></span>
<</if>>
<</if>>
</div>
</div>
<<else>>
<div class="inv-slot empty">EMPTY</div>
<</if>>
<</capture>>
<</for>>
</div>
</div>
<</nobr>><</widget>><<if def $player>>
<<set _sbHead to setup.companyBadgeHtml()>>
<<print _sbHead>>
<div id="bc-sb-tabs" class="bc-sb-tabs"><<sidebarTabs>></div>
<div id="bc-sb-body"><<sidebarBody>></div>
<</if>>
<<if def $player>>
<div class="sidebar-divider"></div>
<div class="sidebar-credits">
<img class="sidebar-credits-coin" src="Images/ui/credits.png" alt="cr">
<span class="sidebar-credits-num"><<print $player.credits>></span>
<span class="sidebar-credits-label">credits</span>
</div>
<<statbar "HP" $player.health $player.maxHealth "#44bb44">>
<<statbar "EN" $player.energy $player.maxEnergy "#cc9922">>
<<if $player.lust gt 0>>
<<statbar "LUST" $player.lust 100 "#dd5599">>
<</if>>
<<if setup.onSphinxter()>>
<<print setup.hydrationBarHtml()>>
<</if>>
<div class="sidebar-divider"></div>
<<print setup.vcrClockHtml()>>
<<miaObjective>>
<<bodyPanel>>
<<weaponSlot>>
<<gearPanel>>
<<inventoryPanel>>
<</if>>
<<print setup.femLadderHtml()>>
<<print setup.stinkPanelHtml()>>
<<print setup.sidebarSettingsHtml()>>
<<if not $companion>><<goto "Ship">><<else>>
<<set _c to $companion>>
<<run setup.companionEnsure(_c)>>
<<set _p to setup.companionPers(_c)>>
<<if not $returnPassage>><<set $returnPassage to "Ship">><</if>>
<<if _c.ko>>
<div class="npc-scene is-comp">
<p class="action-narration is-cold">She's still out from the last run, not answering to anything yet. Nothing to do here until she's back on her feet.</p>
<div class="scene-advance"><<link "Step back">><<goto $returnPassage>><</link>></div>
</div>
<<else>>
<div class="npc-scene is-comp">
<div class="comp-header">
<div class="comp-name"><<print _c.name>></div>
<div class="comp-tier"><<print setup.companionTierName(_c.bond)>> · <<print _p.label>></div>
</div>
<p class="action-narration"><<print setup.companionMoodRead(_c)>></p>
<<set _owedWarn to ((_c.owed || 0) > (_c.wage || 0) * 2)>>
<<set _owedCls to (_owedWarn ? 'comp-owed is-warn' : 'comp-owed')>>
<div class="comp-strip"><span><<print setup.companionMoodWord(_c)>></span><span><<print setup.companionLustWord(_c)>></span><<if not _c.noWage>><span @class="_owedCls"><<print setup.companionOwedWord(_c)>></span><<else>><span class="comp-owed"><<print _c.cutPercent>>% cut on sales</span><</if>></div>
<<if _c.request>>
<div class="comp-request"><span class="comp-request-tag">she wants</span><span class="comp-request-line"><<print _c.request.line || _c.request.label || "something off you, and she's not spelling it out">></span></div>
<</if>>
<<set _talk to setup.companionCanDo(_c, 'talk')>>
<<set _touch to setup.companionCanDo(_c, 'touch')>>
<<set _move to setup.companionCanDo(_c, 'move')>>
<<set _show to setup.companionCanDo(_c, 'show')>>
<<set _care to setup.companionCanDo(_c, 'care')>>
<div class="comp-actions">
<<if _talk.ok>>
<<link "Talk to her · ~10m">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<set _pp to setup.companionPers(_cc)>>
<<set _fresh to setup.companionCanDo(_cc, 'talk').fresh>>
<<run setup.companionSpendAction(_cc, 'talk')>>
<<if _fresh>>
<<run setup.companionBond(2, 'talk')>>
<<if _cc.talkIdx lt _pp.talk.length>>
<<set _beat to _pp.talk[_cc.talkIdx]>><<set _cc.talkIdx++>>
<<set _newf to false>><<if _beat.fact>><<set _newf to setup.companionLearn(_cc, _beat.fact)>><</if>>
<<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print _beat.line>></span></div><<if _newf>><p class="comp-learned">learned — <<print setup.companionFactLabel(_beat.fact)>></p><</if>><</replace>>
<<else>>
<<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print setup.companionRand(setup.COMPANION_IDLE_TALK[_cc.personality] || setup.COMPANION_IDLE_TALK.cumdump)>></span></div><</replace>>
<</if>>
<<else>>
<<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech">we've kind of covered it for now, haven't we. I'm not going anywhere, ask me again later.</span></div><p class="action-narration is-cold">Small talk. Pleasant enough, but you've already had the real conversation today.</p><</replace>>
<</if>>
<</link>>
<<else>>
<span class="comp-act-off">Talk to her · <<print _talk.reason>></span>
<</if>>
<<if _touch.ok>>
<<link "Get your hands on her · ~12m">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<run setup.companionSpendAction(_cc, 'touch')>>
<<set _cc.lust to Math.min(100, ((_cc.lust || 0) + 18))>><<set _cc.needs.mood to Math.min(100, ((_cc.needs.mood || 0) + 3))>>
<<replace "#comp-log">><p class="action-narration is-tense">You take your time with her, hands and mouth, no hurry to be anywhere. By the time you ease off she's breathing through it, wound a good deal tighter than she started.</p><</replace>>
<</link>>
<<else>>
<span class="comp-act-off">Get your hands on her · <<print _touch.reason>></span>
<</if>>
<<if _move.ok>>
<<link "Make a move on her · ~35m">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<set _pp to setup.companionPers(_cc)>>
<<set _act to setup.companionTopAct(_cc)>><<set _w to setup.companionWillingness(_cc, _act)>><<set _mp to setup.companionSceneMedia(_cc, _act)>>
<<set _mcum to setup.companionFinishMedia(_cc, _act, 'cum')>><<set _mdrip to setup.companionFinishMedia(_cc, _act, 'drip', _mcum)>>
<<if _w.level is "eager" or _w.level is "willing">>
<<run setup.companionConsummate(_cc, _w.level, _act)>><<run setup.companionSpendAction(_cc, 'move')>><<run setup.companionFulfill(_cc, 'attention')>>
<<replace "#comp-log">><<if _mp>><div class="npc-scene-media"><<print setup.mediaTag(_mp)>></div><</if>><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print _w.line>></span></div><p class="action-narration is-tense"><<print _pp.sceneOpen>></p><<if _mcum>><div class="npc-scene-media"><<print setup.mediaTag(_mcum)>></div><</if>><p class="action-narration"><<print _pp.sceneClimax>></p><<if _mdrip>><div class="npc-scene-media"><<print setup.mediaTag(_mdrip)>></div><</if>><p class="action-narration is-cold">After, she's heavy against you, slow to come down. <<print setup.companionMoodRead(_cc)>></p><</replace>>
<<elseif _w.level is "reluctant">>
<<run setup.companionConsummate(_cc, _w.level, _act)>><<run setup.companionSpendAction(_cc, 'move')>>
<<replace "#comp-log">><<if _mp>><div class="npc-scene-media"><<print setup.mediaTag(_mp)>></div><</if>><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print _w.line>></span></div><p class="action-narration">It's slower than usual, quieter, more for you than for her, and she gives it up anyway. She means the unspoken part though: don't keep going to the well when she's running on nothing.</p><</replace>>
<<else>>
<<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print _w.line>></span></div><p class="action-narration is-cold">You let it go. Pushing past that would only cost you, and you both know it.</p><</replace>>
<</if>>
<</link>>
<<else>>
<span class="comp-act-off">Make a move · <<print _move.reason>></span>
<</if>>
<<if _show.ok>>
<<link "Ask her to put on a show · ~30m">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<set _w to setup.companionWillingness(_cc, 'show')>>
<<if _w.level isnot "refuse" and _w.level isnot "hardno">>
<<run setup.companionSpendAction(_cc, 'show')>><<set _cc.lust to Math.min(100, ((_cc.lust || 0) + 12))>><<set _cc.needs.mood to Math.min(100, ((_cc.needs.mood || 0) + 4))>><<set _ms to setup.companionSceneMedia(_cc, 'show')>>
<<replace "#comp-log">><<if _ms>><div class="npc-scene-media"><<print setup.mediaTag(_ms)>></div><</if>><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech">you want the show? ...okay. but you don't get to just sit there quiet about it.</span></div><p class="action-narration">She gives you exactly what you asked for and keeps her eyes on your face the whole time, getting more into it the longer you watch.</p><</replace>>
<<else>>
<<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print _w.line>></span></div><p class="action-narration is-cold">Not right now. You let it drop.</p><</replace>>
<</if>>
<</link>>
<<else>>
<span class="comp-act-off">Ask for a show · <<print _show.reason>></span>
<</if>>
<<if _care.ok>>
<<link "Tell her to get some rest · a couple hours">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<run setup.companionSpendAction(_cc, 'care')>>
<<set _cc.energy to Math.min((_cc.maxEnergy || 100), ((_cc.energy || 0) + 35))>><<set _cc.needs.mood to Math.min(100, ((_cc.needs.mood || 0) + 6))>>
<<replace "#comp-log">><p class="action-narration">She doesn't argue it. Curls up in the bunk with her back to the bulkhead, the way she always ends up, and she's gone in under a minute. The ship hums on around her.</p><</replace>>
<</link>>
<<else>>
<span class="comp-act-off">Tell her to rest · <<print _care.reason>></span>
<</if>>
<<link "Gear · ~5m">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>>
<<set _items to setup.companionGiftableGear()>>
<<replace "#comp-log">><p class="action-narration is-cold">She's wearing: <<print setup.companionGearSummary(_cc)>>.</p><<if _items.length>><p class="action-narration">You're carrying gear she could put on:</p><div class="comp-actions"><<for _gi range _items>><<capture _gi>><<link _gi.name>><<set _r to setup.companionEquipGear($companion, _gi.id)>><<if _r.ok>><<run setup.companionRemoveGearFromHold(_gi.id)>><<run setup.companionFulfill($companion, 'gift')>><</if>><<replace "#comp-log">><p class="action-narration"><<print _r.line>></p><</replace>><</link>><</capture>><</for>></div><<else>><p class="action-narration is-cold">You're not carrying anything she can wear. The shop sells plugs, gags, and cages.</p><</if>><</replace>>
<</link>>
<<if (_c.owed || 0) > 0>>
<<link `'Pay her cut · ' + Math.round(_c.owed) + ' cr'`>>
<<set _cc to $companion>><<set _paid to setup.companionPayWages(_cc.owed)>>
<<replace "#comp-log">><<if _paid gt 0>><p class="action-narration">You count out <<print _paid>> credits and put them in her hand.</p><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech"><<print (_cc.owed <= 0) ? "square. that's how we stay friendly, you and me." : "...a partial. better than the nothing I'd been getting. don't make a habit of it.">></span></div><<else>><p class="action-narration is-cold">You don't have the credits to spare, and she clocks the empty hand. She always clocks it.</p><</if>><</replace>>
<</link>>
<</if>>
<<if not _c.noWage>>
<<link "Negotiate her cut · ~10m">>
<<set _cc to $companion>>
<<replace "#comp-log">><p class="action-narration">She leans back against the bulkhead and waits to hear your number.</p><div class="comp-actions"><<for _wt range setup.COMPANION_WAGE_TIERS>><<capture _wt>><<link _wt.label>><<set _t to setup.companionSetWage($companion, _wt.id)>><<replace "#comp-log">><div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech"><<print _t.line>></span></div><</replace>><</link>><</capture>><</for>></div><</replace>>
<</link>>
<</if>>
</div>
<div id="comp-log" class="comp-log"></div>
<div class="scene-advance"><<link "Leave her to it">><<goto $returnPassage>><</link>></div>
</div>
<</if>>
<</if>><<set _rw to setup.recruitWaitingHere()>>
<<if not _rw>><<goto "Station">><<else>>
<<set _rr to _rw.rec>>
<<set _rhe to (_rr.gender eq 'male' ? 'He' : 'She')>>
<<set _rhes to (_rr.gender eq 'male' ? 'he' : 'she')>>
<<set _rhis to (_rr.gender eq 'male' ? 'his' : 'her')>>
<div class="npc-scene is-comp">
<p class="action-narration"><<print _rhe>>'s exactly where the file said <<print _rhes>>'d be, parked against the fuel pumps with a duffel between <<print _rhis>> boots like <<print _rhes>>'s been standing there since the call came through. <<print _rhe>> gives you one slow once-over and decides you're not worth straightening up for.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _rr.name>></span><span class="speech">so you're the ride. <<print _rw.state.dealCut>> percent of everything you move, like we said on the line. i'll strip a planet for you but i'm not dying on one, and i sleep where you sleep. that a problem?</span></div>
<p class="action-narration is-cold"><<print _rhe>> doesn't wait for an answer. <<print _rhe>> shoulders the duffel and walks past you toward the dock, close enough that you get the cold off <<print _rhis>> jacket.</p>
<div class="scene-advance"><<link "Take them aboard">><<set _ruid to _rr.uid>><<set _rnm to _rr.name>><<run setup.recBoard(_ruid)>><<run setup.showUseToast('<b>' + _rnm + '</b> is aboard, on <b>' + $companion.cutPercent + '%</b> of every sale.', { variant: 'hint', dwell: 3400 })>><<goto "Station">><</link>></div>
</div>
<</if>><<if not $companion or not $companion.aboard or $companion.ko>><<goto "Ship">><<else>>
<<set _ca to $companion>>
<<set _caMale to (setup.companionGender(_ca) eq 'male')>>
<<set _caSleepPic to (_caMale ? (setup.pickMedia('shared_male_idle') or setup.pickMedia('slave_sleeping_m')) : setup.pickMedia('slave_sleeping_f'))>>
<div class="ship-header">BUNK — <<print _ca.name>></div>
<div class="npc-scene">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(_caSleepPic)>></div>
<p class="action-narration">He got as far as the bunk and no further. The suit's half off him and pooled around one ankle. He didn't bother with the rest before he went down. One arm's under his head and the other's hanging off the edge.</p>
<p class="action-narration is-cold">Nobody taught him to sleep light. Whatever they had him doing before you, it wasn't the kind of work you come back from alert.</p>
<div class="scene-advance"><<linkreplace "Stand there a second">>
<p class="action-narration">You can hear him breathing. It's the only thing in the ship making any noise that isn't the hull.</p>
<div class="scene-advance">
<<link '<span class="action-label">Leave him to it</span>'>>
<<run setup.showUseToast(_ca.name + " doesn't move.")>>
<<goto "Ship">>
<</link>>
</div>
<div class="scene-advance">
<<link '<span class="action-label">Use him</span>'>>
<<run setup.companionUseAsleep()>>
<<goto "CompanionAsleepUsed">>
<</link>>
</div>
<</linkreplace>></div>
</div>
</div>
<</if>><<if not $companion>><<goto "Ship">><<else>>
<<set _cu to $companionScene or {}>>
<<set _cn to $companion.name>>
<div class="ship-header">BUNK — <<print _cn>></div>
<div class="npc-scene">
<div class="npc-scene-step">
<<if _cu.pic>><div class="npc-scene-media"><<print setup.mediaTag(_cu.pic)>></div><</if>>
<<if _cu.mode eq 'tease'>>
<p class="action-narration">He doesn't need telling and he doesn't look back. He was already in the shape for it and he holds that shape the whole way through, taking it with his face turned into the mattress and one hand closed around the edge of the bunk.</p>
<<else>>
<p class="action-narration">He surfaces about halfway through it, enough to get a hand down on the bunk and take some of his own weight, and that's as far up as he comes. He doesn't ask what you're doing. He works out what's happening to him and then just lets it happen, because that's the shape of the thing he was sold as.</p>
<</if>>
<p class="action-narration">You finish and he stays exactly where you left him, breathing into the mattress with his knees still under him.</p>
<div class="scene-advance">
<<link "Leave him in the bunk">>
<<set $companionScene to null>>
<<goto "Ship">>
<</link>>
</div>
</div>
</div>
<</if>><<if not $companion or not $companion.aboard or $companion.ko>><<goto "Ship">><<else>>
<<set _ct to $companion>>
<<set _ctMale to (setup.companionGender(_ct) eq 'male')>>
<<set _ctPic to (_ctMale ? setup.pickMedia('shared_male_tease') : null)>>
<div class="ship-header">BUNK — <<print _ct.name>></div>
<div class="npc-scene">
<div class="npc-scene-step">
<<if _ctPic>><div class="npc-scene-media"><<print setup.mediaTag(_ctPic)>></div><</if>>
<p class="action-narration">The hatch takes about four seconds to cycle and he's used every one of them. By the time you're through it he's already face down on the bunk with his knees under him and everything else out of the way, and he holds it, because he doesn't know yet whether you want it.</p>
<p class="action-narration is-cold">Nobody told him to do this. He worked out on his own that it's easier to be wanted than to be waited on, and now it's just what he does when he hears you coming.</p>
<div class="scene-advance"><<linkreplace "Look at him for a second">>
<p class="action-narration">He turns his face far enough out of the mattress to check you're still there, sees that you are, and puts it back.</p>
<div class="scene-advance">
<<link "Take him">>
<<run setup.companionUseAsleep('tease')>>
<<goto "CompanionAsleepUsed">>
<</link>>
</div>
<div class="scene-advance">
<<link "Step over him and get on with it">>
<<run setup.companionTeaseIgnored()>>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
</div>
</div>
<</if>><<if not $companion>><<goto "Ship">><<else>>
<<run setup.ciScene()>>
<<set _ci to $companion>>
<<set _cn to $companion.name>>
<<set _cs to $companionScene>>
<<set _male to _cs.male>>
<<set _himher to (_male ? 'him' : 'her')>>
<<set _heshe to (_male ? 'he' : 'she')>>
<<set _hisher to (_male ? 'his' : 'her')>>
<<set _hole to _cs.hole>>
<<set _ciAct to setup.ciPick('act')>>
<<set _ciAct2 to setup.ciPick('act')>>
<<set _turn to setup.ciPlayerTurn()>>
<div class="ship-header">SOMETHING IN THE DARK</div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration">You wake up because the bunk springs are going and it isn't your bunk.</p>
<p class="action-narration is-cold">The hatch is open. You didn't lock it.</p>
<div class="scene-advance"><<linkreplace "Keep still and listen">>
<p class="action-narration">Two sets of breathing. One of them is working and one of them is being worked, and you know which one is <<= _cn>> before you've even turned your head, because you've heard <<= _himher>> make that noise into a mattress before.</p>
<p class="action-narration is-tense">*plap* *plap* *plap*</p>
<p class="action-narration">It's the second sound that tells you how big he is. Under the slap of hips there's a heavier wet knock every time he bottoms out, balls swinging up and hitting hard enough that you can hear the weight in it from across the cabin.</p>
<div class="scene-advance"><<linkreplace "Turn your head">>
<div class="npc-scene-media"><<print setup.mediaTag(_ciAct)>></div>
<p class="action-narration">There's a man on your ship with one hand pressed between <<= _cn>>'s shoulder blades, holding <<= _himher>> down into the mattress, and he's taking his time about it. Big. Dark against the emergency strip. He's got one knee up on the frame for leverage and he's using the whole length of himself on every stroke, unhurried, like he came aboard knowing exactly how long he had.</p>
<<if _cs.pulled>>
<p class="action-narration is-cold"><<= _cn>>'s plug is lying on the deck plate under the bunk. He didn't work around it. He took it out, dropped it on the floor and carried on.</p>
<</if>>
<p class="action-narration"><<= _cn>> has both hands fisted in the sheet and <<= _heshe>> isn't calling for you.</p>
<div class="npc-line is-slave"><span class="speaker"><<= _cn>></span><span class="speech">nngh.. mm.. <span class="whisper">oh f-fuck..</span></span></div>
<p class="action-narration is-cold">He knows you're two metres away. He knows the noise carries in here. <<= _cn>> puts <<= _hisher>> face down into the mattress to kill the sound and it doesn't kill it, and after a few more strokes <<= _heshe>> stops trying.</p>
<div class="scene-advance"><<linkreplace "Watch how long he takes over it">>
<div class="npc-scene-media"><<print setup.mediaTag(_ciAct2)>></div>
<p class="action-narration">He isn't in a hurry and that's the part you can't stop looking at. He changes the angle when he wants to, moves <<= _cn>> where he wants <<= _himher>>, and every time he does it <<= _heshe>> goes with it like the question was already settled somewhere you weren't invited.</p>
<<if _male>>
<p class="action-narration"><<= _cn>>'s own cock is hanging hard and untouched underneath <<= _himher>> and nobody is doing anything about it, and that's what finally breaks <<= _hisher>> voice.</p>
<<else>>
<p class="action-narration">You can see how wet <<= _heshe>> is from here, the shine of it on the inside of <<= _hisher>> thigh every time he pulls back, and <<= _heshe>>'s pushing into it now instead of just taking it.</p>
<</if>>
<div class="npc-line is-slave"><span class="speaker"><<= _cn>></span><span class="speech">nngh, please, p-please <span class="whisper">don't stop don't stop..</span></span></div>
<div class="scene-advance">
<<link "Turn back over and stay out of it">>
<<run setup.companionIntruderResolve('ignore')>>
<<goto "CompanionIntruderEnd">>
<</link>>
</div>
<div class="scene-advance">
<<link "Stay exactly where you are and watch">>
<<run setup.companionIntruderResolve('watch')>>
<<goto "CompanionIntruderEnd">>
<</link>>
</div>
<<if _turn.ok>>
<div class="scene-advance">
<<link "Wait for your turn">>
<<run setup.companionIntruderResolve('turn')>>
<<goto "CompanionIntruderEnd">>
<</link>>
</div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Wait for your turn</span><span class="sa-why"><<= _turn.why>></span></div>
<</if>>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
</div>
<</if>><<if not $companion>><<goto "Ship">><<else>>
<<set _ce to $companionScene or {}>>
<<set _cn to $companion.name>>
<<set _male to _ce.male>>
<<set _himher to (_male ? 'him' : 'her')>>
<<set _heshe to (_male ? 'he' : 'she')>>
<<set _hisher to (_male ? 'his' : 'her')>>
<<set _strap to (_ce.turnMode eq 'strap')>>
<div class="ship-header">SOMETHING IN THE DARK</div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<<if _ce.mode eq 'ignore'>>
<p class="action-narration">You put your face to the bulkhead and leave them to it. It goes on a long time. You hear every part of it with your eyes on the rivets, and at some point near the end the man stops moving and <<= _cn>> makes a sound you have to work not to picture.</p>
<p class="action-narration">Then boots on the deck plate and the hatch cycling behind him, and after that it's just the ship again.</p>
<<if _ce.dripPic>><div class="npc-scene-media"><<print setup.mediaTag(_ce.dripPic)>></div><</if>>
<p class="action-narration is-cold">Neither of you says anything about it. In the morning <<= _heshe>>'s still on <<= _hisher>> front with it drying on the inside of <<= _hisher>> thigh, and <<= _heshe>> doesn't bring it up, and neither do you.</p>
<<elseif _ce.mode eq 'turn'>>
<<if _ce.cumPic>><div class="npc-scene-media"><<print setup.mediaTag(_ce.cumPic)>></div><</if>>
<p class="action-narration">You wait. He finishes the way he started, unhurried, and near the end he leans his whole weight down and holds <<= _cn>> flat while he empties into <<= _himher>>. Then he pulls out, wipes himself on your sheet, and goes down the ladder without once looking over at you.</p>
<p class="action-narration">You give it about four seconds before the deck is cold under your feet.</p>
<p class="action-narration"><<= _cn>> hasn't moved. <<= _heshe.toUpperFirst()>>'s still exactly where the man left <<= _himher>>, open and running down the inside of <<= _hisher>> thigh, and when <<= _heshe>> hears you come up behind <<= _himher>> <<= _heshe>> doesn't turn round to check who it is.</p>
<div class="npc-line is-slave"><span class="speaker"><<= _cn>></span><span class="speech">nngh.. <span class="whisper">it's still.. it's still all in there..</span></span></div>
<div class="scene-advance"><<linkreplace "Take your turn">>
<<run setup.passTime(15)>>
<<if _ce.turnPic>><div class="npc-scene-media"><<print setup.mediaTag(_ce.turnPic)>></div><</if>>
<<if _strap>>
<p class="action-narration">You get the harness straight on your hips and hook a thumb into <<= _hisher>> hip to steady <<= _himher>>, and <<= _heshe>> opens up for it without being told twice. It's already slick in there and the silicone goes in to the buckle on the first push, and the noise <<= _heshe>> makes is somewhere between a complaint and a thank you.</p>
<<else>>
<p class="action-narration">You push in and it's warm and slick and there's no work to it at all. <<= _heshe.toUpperFirst()>> makes a sound like <<= _heshe>>'s been holding it since the hatch opened and pushes back onto you, and it goes wet and loud straight away.</p>
<</if>>
<p class="action-narration is-tense">*shlk* *shlk* *shlk*</p>
<div class="npc-line is-slave"><span class="speaker"><<= _cn>></span><span class="speech">yes, yes, f-fuck, please, use it, it's y-yours <span class="whisper">it's yours..</span></span></div>
<div class="scene-advance"><<linkreplace "Finish what he started">>
<<run setup.passTime(10)>>
<<if _ce.turnCumPic>><div class="npc-scene-media"><<print setup.mediaTag(_ce.turnCumPic)>></div><</if>>
<<if _strap>>
<p class="action-narration">You don't finish, because there's nothing on you that can, so you just work <<= _himher>> until <<= _heshe>>'s the one shaking under your hands with <<= _hisher>> face in the sheet, and then you keep going a while after that because <<= _heshe>> hasn't asked you to stop and <<= _heshe>> isn't going to.</p>
<<else>>
<p class="action-narration">You finish in <<= _himher>> on top of the other man's and <<= _heshe>> takes that too, shaking under your hands and making a noise with no shape to it, and when you let go of <<= _hisher>> hips <<= _heshe>> doesn't move from where you put <<= _himher>>.</p>
<</if>>
<p class="action-narration is-cold"><<= _heshe.toUpperFirst()>>'s out before you are. Whatever the rest of the night was going to be, <<= _heshe>> isn't awake for any of it, and by the time the cabin lights come up on their own <<= _heshe>> still hasn't moved off <<= _hisher>> front.</p>
<div class="scene-advance">
<<link "Go back to your own bunk">>
<<run setup.passTime(5)>>
<<set $companionScene to null>>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<<else>>
<<if _ce.cumPic>><div class="npc-scene-media"><<print setup.mediaTag(_ce.cumPic)>></div><</if>>
<p class="action-narration">You lie there and let it happen, and it happens for a long time. He works <<= _cn>> through it slow and then not slow, and near the end he gets a fistful of hair and holds <<= _himher>> where he wants <<= _himher>>, and <<= _cn>> takes it with <<= _hisher>> mouth open against the sheet making a sound that isn't words.</p>
<div class="npc-line is-slave"><span class="speaker"><<= _cn>></span><span class="speech">mm-MM.. <span class="whisper">nngh, right there, please, please, right th-</span></span></div>
<p class="action-narration">*plap plap plap* and then he pushes all the way in and stops, and you watch <<= _cn>>'s whole back lock up and shudder while the man empties himself into <<= _himher>>.</p>
<p class="action-narration">He pulls out, wipes himself on your sheet, and goes out through the hatch without hurrying. He never once looks over at you. He knew you were awake the entire time.</p>
<p class="action-narration is-cold"><<= _cn>> lies there breathing with it running out of <<= _himher>>. When <<= _heshe>> finally turns <<= _hisher>> head and finds you looking back, <<= _heshe>> doesn't say anything.</p>
<</if>>
<<if _ce.mode neq 'turn'>>
<p class="action-narration is-cold"><<= _heshe.toUpperFirst()>>'s out before you are. Whatever the rest of the night was going to be, <<= _heshe>> isn't awake for any of it, and by the time the cabin lights come up on their own <<= _heshe>> still hasn't moved off <<= _hisher>> front.</p>
<div class="scene-advance">
<<link "Sit up">>
<<run setup.passTime(10)>>
<<set $companionScene to null>>
<<goto "Ship">>
<</link>>
</div>
<</if>>
</div>
</div>
<</if>>
<<if not $companion>><<goto "Ship">><<else>>
<<set _cbo to setup.companionBonerOptions()>>
<<set _cbnA to setup.cbnPick('present')>>
<<set _cbnB to setup.cbnPick('stroke')>>
<<set _cbnH to setup.cbnPick('grope')>>
<div class="ship-header">HE NOTICES</div>
<div class="npc-scene is-comp">
<div class="npc-scene-step">
<<if _cbo.caged>>
<p class="action-narration">You get the hatch sealed behind you and stand there a moment. You've been trying to get hard since the second gate and the cage has been telling you no the whole way back, so what you've got now is a dull ache behind the metal and a wet patch on the inside of your suit that's been spreading since the ridge.</p>
<<elseif _cbo.small>>
<p class="action-narration">You get the hatch sealed behind you and stand there a moment. You've been hard since the second gate, for whatever that's worth on you now, and the walk back only wound it tighter. There isn't much to look at down there. It aches like there is.</p>
<<else>>
<p class="action-narration">You get the hatch sealed behind you and stand there a moment, because you've been hard since the second gate and the walk back didn't take it down. The suit isn't cut to hide that. You can feel your own pulse in it.</p>
<</if>>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech"><<print setup.cbnQuip(_cbo)>></span></div>
<div class="scene-advance"><<linkreplace "Drop onto the bunk and let it pass">>
<p class="action-narration">You drop onto the bunk, put an arm over your eyes and give it a minute to sort itself out. It doesn't. The cabin's warm and the hum is low and your whole body is still running at whatever pitch the planet left it at, so lying still just gives it somewhere to go.</p>
<p class="action-narration">Then the light changes behind your arm. When you move it he's already in your eyeline with his back to you and his gear down.</p>
<div class="npc-scene-media"><<print setup.mediaTag(_cbnA)>></div>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech"><<print setup.COMPANION_BONER_LINE[$companion.personality] || setup.COMPANION_BONER_LINE.cumdump>></span></div>
<div class="scene-advance"><<linkreplace "Tell him to pack it in">>
<p class="action-narration">You tell him to pack it in. He hears you fine. He rolls over instead, gets a hand around himself and starts working it slow where you can't do anything but watch, and he keeps his eyes on you the whole time to make sure you know it's aimed at you.</p>
<div class="npc-scene-media"><<print setup.mediaTag(_cbnB)>></div>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech"><<print setup.COMPANION_BONER_PUSH[$companion.personality] || setup.COMPANION_BONER_PUSH.cumdump>></span></div>
<p class="action-narration is-tense">He's close enough now that you'd only have to sit up.</p>
<div class="scene-advance"><<linkreplace "Grab a handful of him">>
<p class="action-narration">You sit up and get a handful of him, and the sound he makes is way out of proportion to a hand. He goes quiet and still for a second, then he's pushing back into your palm and grinning at the wall.</p>
<div class="npc-scene-media"><<print setup.mediaTag(_cbnH)>></div>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">*nngh* .. mm, there, that's it, finally, come ON</span></div>
<div class="scene-advance"><<linkreplace "Decide what you're doing about it">>
<<if _cbo.anal>>
<div class="scene-advance"><<linkreplace "Bend him over properly">>
<<run setup.companionBonerResolve('anal')>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.pic)>></div>
<<if $companionScene.sub is "ride">>
<p class="action-narration">You get as far as a knee on the bunk before he takes the whole thing off you. Flat on your back, him climbing over. He's done this before and he isn't pretending otherwise.</p>
<p class="action-narration">He works himself down onto it in stages, stopping twice with his mouth open and nothing coming out. Then he's sitting on it, setting his own pace.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">mmh.. mmh, there, oh fuck that's good, don't move, I've got it</span></div>
<p class="action-narration">He rides it until his thighs shake. Somewhere in there you finish, with your hands on his hips and nothing to do but let him have it.</p>
<<else>>
<p class="action-narration">You put him where you want him and he folds without an argument. He's already reaching back to hold himself open before you've got a proper grip. The noise he makes when you push in isn't a word.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">*nngh* .. fuck, yes, like that, don't stop, please don't stop</span></div>
<p class="action-narration">He works himself back onto every stroke. He's still doing it after you've finished in him, and it takes him a second to catch up.</p>
<</if>>
<div class="scene-advance"><<link "Get cleaned up">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off">
<span class="sa-label">Bend him over properly</span>
<span class="sa-why"><<if _cbo.caged>>the cage isn't coming off for this<<elseif _cbo.small>>there isn't enough of it to fuck him with<<else>>he's still plugged<</if>></span>
</div>
<</if>>
<<if _cbo.oral>>
<div class="scene-advance"><<linkreplace "Put him on his knees instead">>
<<run setup.companionBonerResolve('oral')>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.pic)>></div>
<p class="action-narration">He's off the bunk and on his knees before you've finished telling him to be, and then his mouth is on you and he's making a mess of it on purpose, loud enough that the hum under the floor doesn't cover any of it.</p>
<p class="action-narration is-cold">*slurrrp* *sluuuurp* *slurrrrp*</p>
<p class="action-narration">He takes it down his throat when you go and keeps working you through the whole thing. When he finally sits back on his heels he wipes his mouth on the back of his hand and looks up at you still hard, still nowhere near done with his own night.</p>
<div class="scene-advance"><<link "Let him up">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off">
<span class="sa-label">Put him on his knees instead</span>
<span class="sa-why"><<if _cbo.caged>>caged, so there's nothing for him to work on<<else>>the gag's still buckled on him<</if>></span>
</div>
<</if>>
<<if _cbo.serviced>>
<div class="scene-advance"><<linkreplace "Let him deal with it for you">>
<<run setup.companionBonerResolve('serviced')>>
<div class="npc-scene-step">
<p class="action-narration">He looks at what you've got down there for a second longer than is polite, then shrugs and reaches past you for the bottle off the shelf with the flat confidence of somebody who has done this before.</p>
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.seq[0])>></div>
<p class="action-narration">He gets you slick first. You weren't expecting that part.</p>
<div class="scene-advance"><<linkreplace "Let him get on with it">>
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.seq[1])>></div>
<p class="action-narration">Then he puts his feet on you and works you between them with his socks still on. It shouldn't do much. It does plenty. You end up flat on your back watching him do it with his knees up round his ears and that stupid pleased look on his face.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">mm. yeah, there it is. knew it still worked.</span></div>
<div class="scene-advance"><<linkreplace "Let go">>
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.seq[2])>></div>
<p class="action-narration">He keeps at it right through it and you go off over your own stomach with his feet still on you, and he watches the whole thing happen with his chin propped on his knee.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">see, that's all it needed. bit of help. you don't have to make that face about it.</span></div>
<div class="scene-advance"><<link "Wipe yourself down">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
<</if>>
<<if _cbo.caged>>
<div class="scene-advance"><<linkreplace "Finish him with your hand">>
<<run setup.companionBonerResolve('fingers')>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag($companionScene.pic)>></div>
<p class="action-narration">You keep going with your hand, since your hand is the only part of this you're allowed to use. Two fingers in and he's already working himself back onto them, telling you where, getting louder about it than the cabin really allows for.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">*nngh* .. right there, right there, don't you dare stop</span></div>
<p class="action-narration is-cold">He gets there all over the sheets. You don't get anywhere at all. The cage sits through the whole thing doing exactly what it was built to do, and you come away from it wound tighter than you walked in.</p>
<div class="scene-advance"><<link "Leave it at that">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
</div>
<</linkreplace>></div>
<</if>>
<div class="scene-advance"><<linkreplace "Take your hand back">>
<<run setup.companionBonerResolve('leave')>>
<div class="npc-scene-step">
<p class="action-narration">You take your hand back and wipe it on the blanket and get on with what you came in here to do. He stays exactly where he is for a couple of seconds in case you're going to change your mind, then straightens up and pulls his gear back over it like that was the plan the whole time.</p>
<p class="action-narration is-cold">He's still wound up when he sits down. That's going to be somebody's problem tonight.</p>
<div class="scene-advance"><<link "Get on with your night">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<div class="scene-advance"><<linkreplace "Walk past him and get on with your night">>
<<run setup.companionBonerResolve('ignore')>>
<div class="npc-scene-step">
<p class="action-narration">You walk past him and start doing the thing you actually came in here to do. He holds the pose a good while longer than is dignified, waiting for you to look, and when you don't he lets it go and sits back on his heels.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech">yeah, alright. message received. rude, but received.</span></div>
<p class="action-narration is-cold">It goes out of him while you're not watching. Whatever he had worked up on the walk over is gone by the time he pulls his gear back up.</p>
<div class="scene-advance"><<link "Get on with your night">><<set $companionScene to null>><<set _cbnOut to previous()>><<goto _cbnOut>><</link>></div>
</div>
<</linkreplace>></div>
</div>
</div>
<</if>>
<<if not $companion>><<set _cmDest to $returnPassage || "Ship">><<goto _cmDest>><<else>>
<<set _c to $companion>><<run setup.companionEnsure(_c)>><<set _p to setup.companionPers(_c)>>
<<set _mp to setup.companionSceneMedia(_c, 'show')>>
<div class="npc-scene is-comp">
<p class="action-narration is-tense">You key the bunk open and she doesn't hear it. One hand busy, a toy doing the rest of the work, head tipped back and her bottom lip caught in her teeth, too far gone to clock you in the doorway. And then she does, all at once.</p>
<<if _mp>><div class="npc-scene-media"><<print setup.mediaTag(_mp)>></div><</if>>
<div class="npc-line is-comp"><span class="speaker"><<print _c.name>></span><span class="speech"><<print setup.COMPANION_CAUGHT[_c.personality] || setup.COMPANION_CAUGHT.cumdump>></span></div>
<div class="scene-advance"><<link "Take over for her">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>><<set _pp to setup.companionPers(_cc)>>
<<set _act to setup.companionTopAct(_cc)>><<set _w to setup.companionWillingness(_cc, _act)>><<set _m2 to setup.companionSceneMedia(_cc, _act)>>
<<set _m2cum to setup.companionFinishMedia(_cc, _act, 'cum')>><<set _m2drip to setup.companionFinishMedia(_cc, _act, 'drip', _m2cum)>>
<<if _w.level isnot "refuse" and _w.level isnot "hardno">>
<<run setup.companionConsummate(_cc, _w.level, _act)>><<run setup.companionSpendAction(_cc, 'move')>><<run setup.companionFulfill(_cc, 'attention')>>
<<replace "#walkin-log">><<if _m2>><div class="npc-scene-media"><<print setup.mediaTag(_m2)>></div><</if>><p class="action-narration is-tense"><<print _pp.sceneOpen>></p><<if _m2cum>><div class="npc-scene-media"><<print setup.mediaTag(_m2cum)>></div><</if>><p class="action-narration"><<print _pp.sceneClimax>></p><<if _m2drip>><div class="npc-scene-media"><<print setup.mediaTag(_m2drip)>></div><</if>><p class="action-narration is-cold">After, the toy's forgotten on the sheets and she's wrung out against you. <<print setup.companionMoodRead(_cc)>></p><</replace>>
<<else>>
<<replace "#walkin-log">><div class="npc-line is-comp"><span class="speaker"><<print _cc.name>></span><span class="speech">mm, no, I've got this one, I'm almost there and I'm not starting over.</span></div><p class="action-narration">She waves you off and finishes the way she wants to, on her own terms, while you watch.</p><</replace>>
<</if>>
<</link>></div>
<div class="scene-advance"><<link "Just watch">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>>
<<set _cc.lust to Math.min(100, ((_cc.lust || 0) + 10))>>
<<if _cc.traits and _cc.traits.indexOf('exhibitionist') gte 0>><<set _cc.needs.mood to Math.min(100, ((_cc.needs.mood || 0) + 10))>><</if>>
<<replace "#walkin-log">><p class="action-narration is-tense">You lean on the doorframe and let her get on with it. She doesn't tell you to go. If anything she gets louder once she knows she's got an audience, watching you watch her right up until she comes apart.</p><</replace>>
<</link>></div>
<div class="scene-advance"><<link "Give her the room">>
<<set _cc to $companion>><<run setup.companionEnsure(_cc)>>
<<run setup.companionBond(3, 'respect')>><<set _cc.needs.mood to Math.min(100, ((_cc.needs.mood || 0) + 8))>>
<<replace "#walkin-log">><p class="action-narration">You step back out and ease the door shut behind you. A small thing. She'll have heard you do it, and known exactly what it meant.</p><</replace>>
<</link>></div>
<div id="walkin-log" class="comp-log"></div>
<div class="scene-advance is-keep"><<link "Step away">><<goto $returnPassage>><</link>></div>
</div>
<</if>><<set _cont to setup.continueInfo()>>
<div class="age-gate-screen">
<div class="age-gate-image"><img src="Images/ui/age_gate_18plus.png" alt="18+ only"></div>
<div class="age-gate-title">Warning</div>
<div class="age-gate-text">
This game contains explicit sexual content, nudity, and mature themes. It is intended for adults only.
By continuing, you confirm that you are at least 18 years old and that viewing adult content is legal in your jurisdiction.
</div>
<div class="age-gate-buttons">
<<if _cont>>
<<link '<span class="age-gate-continue">Continue</span>'>><<run setup.continueGame()>><</link>>
<<link '<span class="age-gate-yes">New game</span>'>><<goto "CharacterCreation">><</link>>
<<else>>
<<link '<span class="age-gate-yes">I am 18+</span>'>><<goto "CharacterCreation">><</link>>
<</if>>
<<link '<span class="age-gate-no">Leave</span>'>><<goto "Denied">><</link>>
</div>
</div><div class="denied-screen">
This content is not available to you.
</div>
<<done>>
<<script>>
try { window.close(); } catch (e) {}
<</script>>
<</done>><div class="creation-screen">
<div class="creation-title">DESIGNATION</div>
<p class="creation-sub">The company doesn't hand out names, it stamps you with a serial. Build the one they put on you, because the build is the body you wake up in.</p>
<div class="creation-builder">
<div class="creation-row"><span class="creation-label">Build</span>
<<listbox "$creation.build" autoselect>><<option "Huge Cock" "HugeCock">><<option "Big Dick" "BigDick">><<option "Fat Hog" "FatHog">><<option "Average Cock" "AverageCock">><<option "Little Dick" "LittleDick">><<option "Pencil Dick" "PencilDick">><<option "Tiny Cock" "TinyCock">><<option "Huge Tits" "HugeTits">><<option "Big Titty" "BigTitty">><<option "Perky Tits" "PerkyTits">><<option "Fat Ass" "FatAss">><<option "Big Booty" "BigBooty">><<option "Thicc" "Thicc">><<option "Tight Cunt" "TightCunt">><<option "Wet Snatch" "WetSnatch">><</listbox>></div>
<div class="creation-row"><span class="creation-label">Role</span>
<<listbox "$creation.role" autoselect>><<option "Worker">><<option "Drone">><<option "Unit">><<option "Toy">><<option "Hole">><<option "Bitch">><<option "Cumdump">><<option "Breeder">><</listbox>></div>
<div class="creation-row"><span class="creation-label">Serial</span>
<<numberbox "$creation.number" 6969>></div>
</div>
<p class="creation-hint">A cock build launches you as a man and the words set your size, from a Huge Cock down to a Tiny one. A tits, ass, or pussy build launches you as a woman and sets her shape. The role is just what the company files you under.</p>
<div class="creation-actions">
<<link "Continue">><<goto "CharacterConfirm">><</link>>
</div>
</div><<set _g to setup.callsignGender($creation.build)>>
<div class="creation-screen">
<div class="creation-title">CONFIRM</div>
<div class="creation-callsign"><<print setup.buildCallsign($creation)>></div>
<p class="creation-sub">You launch as <<if _g eq "female">>a woman, and you stay one unless you find something out there to change that<<else>>a man<</if>>.</p>
<<if _g eq "male">>
<div class="creation-toggle-row">
<<link `'<span class="creation-check ' + ($settings.forcedTransform ? 'is-on' : 'is-off') + '">' + ($settings.forcedTransform ? '✓' : '') + '</span>'`>><<set $settings.forcedTransform to not $settings.forcedTransform>><<goto "CharacterConfirm">><</link>>
<div class="creation-toggle-text"><span class="creation-toggle-label">Forced change at fem 60</span><span class="creation-toggle-hint">On, you drift to a woman the classic way once your fem maxes out and you sleep. Off, you stay a man no matter how feminine you get, cock and all. You can flip this any time in Settings.</span></div>
</div>
<<else>>
<div class="creation-toggle-row is-disabled">
<span class="creation-check is-na">–</span>
<div class="creation-toggle-text"><span class="creation-toggle-label">Forced change at fem 60</span><span class="creation-toggle-hint">Not applicable. You started a woman, so there's nothing left to force.</span></div>
</div>
<</if>>
<div class="creation-toggle-row">
<<link `'<span class="creation-check ' + (($settings.qteStyle || 'bar') === 'coin' ? 'is-on' : 'is-off') + '">' + (($settings.qteStyle || 'bar') === 'coin' ? '✓' : '') + '</span>'`>><<set $settings.qteStyle to ((($settings.qteStyle || 'bar') === 'coin') ? 'bar' : 'coin')>><<goto "CharacterConfirm">><</link>>
<div class="creation-toggle-text"><span class="creation-toggle-label">Coin flip reflex checks</span><span class="creation-toggle-hint">On, fights and escapes resolve on a coin toss at the same odds. Off, you read the timing bar and your reflexes decide it. You can flip this any time in Settings.</span></div>
</div>
<div class="creation-actions">
<<link '<span class="creation-launch">LAUNCH</span>'>><<run setup.finishCreation()>><<goto "Intro">><</link>>
<<link "Back">><<goto "CharacterCreation">><</link>>
</div>
</div><div class="intro-screen">
<h1 class="intro-title">BIMBO COMPANY</h1>
<div class="intro-sub">Property Recovery Division</div>
<div class="intro-planet">
<img class="intro-planet-img" src="Images/ui/AreolA-5569.png" alt="AreolA-5569">
<div class="intro-planet-label">AREOLA-5569</div>
</div>
<div class="intro-text">
You were born on AreolA-5569 to a local mother that Bimbo Company bred with one of their soldiers after they took the planet, the same way they handle most of their colonies once the shooting's done.
You were the output of all that.
They raised you up to nineteen and then they put a suit on you, dropped you on a ship, and stamped you with a number.
</div>
<div class="intro-designation"><<print $player.name>></div>
<div class="intro-text">
Your job from here on out is to land on whatever planets they point you at, scrape together anything worth credits, and bring it back, and the second you stop being profitable at that they open the airlock on you while you're still drifting.
This is your first run.
</div>
<div class="intro-start">
<<link "Open your eyes">>
<<set $ship.docked to true>>
<<set $ship.landed to false>>
<<set $ship.stationName to "Cumdump-9">>
<<set $ship.locId to "cumdump-9">>
<<run setup.stationArrive("cumdump-9")>>
<<set $time.active to true>>
<<goto "Ship">>
<</link>>
</div>
</div>
<<set _bunkBusy to (setup.companionToyReliefEligible() or setup.companionHandReliefEligible())>>
<<if not _bunkBusy and setup.companionBonerRoll()>><<goto "CompanionBoner">><</if>>
<<if $pendingFemTransition>><<goto "FemTransition">><</if>>
<<run setup.stopBoomboxSong()>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.45 })>>
<<run setup.setAmbient('music', 'Sounds/music/ship_lofi.mp3', { volume: 0.22, fadeInMs: 1600, fadeOutMs: 1200 })>>
<<run setup.stopAmbient('scan')>>
<<run setup.consumePendingRankUp()>>
<<if $ship.upgraded>>
<div class="ship-header">THE SHIP</div>
<<roomImage "ship_engineering">>
<div class="ship-desc">
<<if $ship._firstUpgradeView neq true>>
You walk in and the door seals behind you and you stand there for a second and just look. There's actual headroom over the bunk now. The walls aren't stained. The hum under the floor is steady and even instead of the rattle you got used to. There's a hologram of your ship rotating slow on a pedestal off to the right, like Tsu wanted to make sure you knew exactly what she changed. The fuel gauge reads $ship.fuel%.
<<set $ship._firstUpgradeView to true>>
<<else>>
The new ship still feels new every time you walk into it. The lights come up clean, the hum is steady, the air smells like nothing in particular for the first time in your life. The fuel gauge sits at $ship.fuel% above whatever you're going to spend it on next.<<print setup.companionHereLine()>>
<</if>>
</div>
<<else>>
<div class="ship-header">THE SHIP</div>
<<roomImage "ship_interior">>
<div class="ship-desc">
<<if visited() eq 1>>The ship is small enough that you can touch the far wall from the bunk if you stretch, with the terminal at the front and the hatch to your left and a battered handbook wedged in between the console and the wall where someone before you must have left it. The fuel gauge reads $ship.fuel%.
<<else>>The terminal's humming away to itself the way it always does, your bunk is still unmade from where you crawled out of it, and the fuel gauge sits at $ship.fuel% above whatever you're going to spend it on next.<<print setup.companionHereLine()>>
<</if>>
</div>
<</if>>
<<if $ship.fuel lte 0>>
<div class="warning">WARNING: Fuel reserves have hit zero, all ship systems are dropping offline, and life support is on a countdown you can't afford to wait out.</div>
<</if>>
<<if $ship.landed>>
<<set $ship.doorOpen to true>>
<</if>>
<<if $ship.landed and $player.energy lte 30 and not $ship.hatchLocked>>
<<run setup.showHintOnce('hatchHintShown', "psst, run <code>/lock</code> in the terminal before you sleep or something might let itself in")>>
<</if>>
<div class="ship-actions">
<<if $ship.upgraded>>
<div class="ship-action">
<<link '<span class="action-label">Cockpit</span><span class="action-hint">Flight controls and the terminal</span>'>><<goto "Cockpit">><</link>>
</div>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/handbook.png" alt=""><span class="action-label">Handbook</span><span class="action-hint">Employee manual</span>'>><<run setup.openHandbookClipboard()>><</link>>
</div>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/storage.png" alt=""><span class="action-label">Storage Bay</span><span class="action-hint">Cargo racks (<<print $ship.storage.length>> items stored)</span>'>><<goto "ShipStorage">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Sleeping Quarters</span><span class="action-hint">Bunk under the viewport, lounge couch</span>'>><<goto "SleepingQuarters">><</link>>
</div>
<<else>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/terminal.png" alt=""><span class="action-label">Terminal</span><span class="action-hint">Ship computer</span>'>><<goto "Terminal">><</link>>
</div>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/handbook.png" alt=""><span class="action-label">Handbook</span><span class="action-hint">Employee manual</span>'>><<run setup.openHandbookClipboard()>><</link>>
</div>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/storage.png" alt=""><span class="action-label">Storage</span><span class="action-hint">Ship cargo hold (<<print $ship.storage.length>> items)</span>'>><<goto "ShipStorage">><</link>>
</div>
<<set _ambEv to setup.rollEvent('shipBunk', {})>>
<<if _ambEv>>
<<run _ambEv.apply && _ambEv.apply({})>>
<<set _ambDest to _ambEv.scene>>
<<goto _ambDest>>
<</if>>
<<bunkMenu>>
<</if>>
<<if $ship.landed and $ship.hatchLocked>>
<div class="disabled-action"><span class="action-label">Open the door</span><span class="action-hint"> · HATCH BOLTED FROM INSIDE (use /unlock in terminal)</span></div>
<<elseif $ship.landed>>
<<if $planet and $planet.isCity>>
<div class="ship-action">
<<link '<span class="action-label">Open the door</span><span class="action-hint">Step out into $ship.planetName</span>'>><<run setup.playSound('hatch_open', { volume: 0.7 })>><<goto "Labrotoria">><</link>>
</div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Open the door</span><span class="action-hint">Exit to $ship.planetName surface</span>'>><<run setup.playSound('hatch_open', { volume: 0.7 })>><<goto "PlanetSurface">><</link>>
</div>
<</if>>
<<elseif $ship.docked>>
<div class="ship-action">
<<link '<span class="action-label">Exit to station</span><span class="action-hint">$ship.stationName concourse</span>'>><<run setup.playSound('hatch_open', { volume: 0.7 })>><<goto "Station">><</link>>
</div>
<<else>>
<div class="disabled-action"><span class="action-label">Open the door</span><span class="action-hint"> · LOCKED: drifting</span></div>
<</if>>
</div>
<div class="rbar-header">CREW LINK</div>
<<if $companion>>
<div class="sidebar-designation"><<print $companion.name>></div>
<div class="sidebar-rank"><<print setup.getRankName($companion.rank || 0)>></div>
<div class="sidebar-divider"></div>
<<if setup.canRaiseCompanion()>>
<<set _crwCall to setup.crewCall($companion)>>
<<set _crwLive to ($companion.relief ? 1 : 0)>>
<<set _crwWants to (_crwCall or _crwLive or $companion.callOutcome or ($companion.notes and $companion.notes.length)) ? 1 : 0>>
<<set _crwNote to (not _crwCall and not $companion.callOutcome and $companion.notes and $companion.notes.length) ? 1 : 0>>
<<print '<button class="sidebar-settings-btn rbar-comms-btn' + ($companion.ko ? ' is-nosignal' : '') + (_crwWants ? ' is-wants' : '') + '" type="button" onclick="setup.openCrewComms()">' + setup.ICONS.radio + '<span>' + ($companion.ko ? 'No Signal' : (_crwLive ? 'Open channel · ' + Math.max(0, Math.ceil($companion.relief.left)) + 'm' : (_crwCall ? 'Asking you · ' + Math.max(0, Math.ceil(_crwCall.left)) + 'm' : ($companion.callOutcome ? 'Message' : 'Radio')))) + '</span><span class="kb-hint kb-hint-abs">R</span></button>'>>
<</if>>
<div class="sidebar-divider"></div>
<<if $companion.aboard or setup.companionEarshot($companion)>>
<<statbar "HP" $companion.health $companion.maxHealth "#44bb44">>
<<statbar "EN" $companion.energy $companion.maxEnergy "#cc9922">>
<<if $companion.lust gt 0>>
<<statbar "LUST" $companion.lust 100 "#dd5599">>
<</if>>
<div class="sidebar-divider"></div>
<<compBodyPanel>>
<<compWeaponSlot>>
<<compGearPanel>>
<<compCargoPanel>>
<<else>>
<div class="rbar-dark">NO TELEMETRY<span>Out of range. Raise them on the radio.</span></div>
<</if>>
<<else>>
<div class="rbar-empty">
<div class="rbar-empty-title">NO LINK</div>
Nobody's riding along. If the company ever straps a second body to your contract, their vitals show up here.
</div>
<</if>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.45 })>>
<<run setup.setAmbient('music', 'Sounds/music/ship_lofi.mp3', { volume: 0.22, fadeInMs: 1200 })>>
<<run setup.stopAmbient('scan')>>
<div class="ship-header">COCKPIT</div>
<<roomImage "ship_cockpit">>
<div class="ship-desc">
Two seats angled toward the front, viewports curving the whole sweep of the bow, the avionics laid out across the panels in clean blue holos that didn't exist on the old hauler. The chair on the left has the captain markings worn into the headrest. Fuel reads $ship.fuel% on the gauge above the right console.<<print setup.companionHereLine()>>
</div>
<div class="ship-actions">
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/terminal.png" alt=""><span class="action-label">Terminal</span><span class="action-hint">Ship computer + flight commands</span>'>><<goto "Terminal">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to the bay</span><span class="action-hint">Out to the engineering hub</span>'>><<goto "Ship">><</link>>
</div>
</div>
<<set _bunkBusy to (setup.companionToyReliefEligible() or setup.companionHandReliefEligible())>>
<<if not _bunkBusy and setup.companionBonerRoll()>><<goto "CompanionBoner">><</if>>
<<if $pendingFemTransition>><<goto "FemTransition">><</if>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.40 })>>
<<run setup.setAmbient('music', 'Sounds/music/ship_lofi.mp3', { volume: 0.22, fadeInMs: 1200 })>>
<<run setup.stopAmbient('scan')>>
<div class="ship-header">SLEEPING QUARTERS</div>
<<roomImage "ship_bedroom">>
<div class="ship-desc">
A wide bed sits against the back wall, blue duvet pulled but not military-folded, the viewport behind it looking straight out into the dark. There's room for someone next to you in it, the way Tsu pointed out. The platform steps down to a couch and a low table, and there's a bookshelf along the right wall with actual books on it, none of them company-issue.<<print setup.companionHereLine()>>
</div>
<<set _ambEv to setup.rollEvent('shipBunk', {})>>
<<if _ambEv>>
<<run _ambEv.apply && _ambEv.apply({})>>
<<set _ambDest to _ambEv.scene>>
<<goto _ambDest>>
<</if>>
<div class="ship-actions">
<<bunkMenu>>
<<if setup.upgradeOwned('bathroom')>>
<div class="ship-action">
<<link '<span class="action-label">Bathroom</span><span class="action-hint">The new wet-room</span>'>><<goto "ShipBathroom">><</link>>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Back to the bay</span><span class="action-hint">Out to the engineering hub</span>'>><<goto "Ship">><</link>>
</div>
</div><<if not $companion>>
<<goto "SleepingQuarters">>
<<else>>
<<set _c to $companion>>
<<run setup.companionEnsure(_c)>>
<<set _toy to setup.companionHeldToy(_c)>>
<<if not _toy>>
<<goto "SleepingQuarters">>
<<else>>
<<set _female to (setup.companionGender(_c) eq 'female')>>
<<set _heshe to (_female ? 'she' : 'he')>>
<<set _himher to (_female ? 'her' : 'him')>>
<<set _Heshe to (_female ? 'She' : 'He')>>
<<set _name to (_c.name or 'Your companion')>>
<<set _toyname to _toy.name.toLowerCase()>>
<<set _flavor to setup.companionToyFlavor(_toy.id)>>
<<set _media to setup.companionToyMedia(_c, _toy.id, false)>>
<div class="npc-scene is-comp">
<div class="npc-scene-step">
<p class="action-narration">The hatch to the bunk is half open and you weren't trying to be quiet, but <<= _heshe>> doesn't stop. <<= _name>> is stretched out on the mattress with the <<= _toyname>> <<= _heshe>> dragged back from the last run, <<= _flavor>>. So that's where it went.</p>
<<if _media>><div class="npc-scene-media"><<= setup.mediaTag(_media)>></div><</if>>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">mmh.. took you long enough, I couldn't wait, I had to do something with it</span></div>
<p class="action-narration is-tense"><<= _Heshe>> looks right at you and keeps going, the toy not slowing down even a little.</p>
<div class="scene-advance"><<link "Lean on the hatch and watch <<= _himher>> finish">><<goto "CompanionToyReliefWatch">><</link>></div>
<div class="scene-advance"><<link "Cross over and take it off <<= _himher>>">><<goto "CompanionToyReliefJoin">><</link>></div>
<div class="scene-advance"><<link "Leave <<= _himher>> to it">><<run setup.companionToyReliefIgnore()>><<run setup.hapOff()>><<goto "SleepingQuarters">><</link>></div>
</div>
</div>
<</if>>
<</if>><<if not $companion>>
<<goto "SleepingQuarters">>
<<else>>
<<set _c to $companion>>
<<set _female to (setup.companionGender(_c) eq 'female')>>
<<set _heshe to (_female ? 'she' : 'he')>>
<<set _himher to (_female ? 'her' : 'him')>>
<<set _Heshe to (_female ? 'She' : 'He')>>
<<set _name to (_c.name or 'Your companion')>>
<<set _toy to setup.companionHeldToy(_c)>>
<<set _media to setup.companionToyMedia(_c, (_toy ? _toy.id : 'dildo'), true)>>
<div class="npc-scene is-comp">
<div class="npc-scene-step">
<p class="action-narration">You don't move, you just lean on the frame and let <<= _himher>> have it. <<= _name>> holds your eyes the whole way down, getting louder, the toy going faster than <<= _heshe>>'d ever admit to wanting, until <<= _heshe>> arches off the mattress and rides it out shaking.</p>
<<if _media>><div class="npc-scene-media"><<= setup.mediaTag(_media)>></div><</if>>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">*pant* *pant* ..you just watched, you didn't even, god.. next time you don't get to just stand there</span></div>
<p class="action-narration is-cold"><<= _Heshe>> drops the toy off the side of the bunk and lets a slow breath out, and the look <<= _heshe>> gives you says <<= _heshe>>'s not even a little sorry.</p>
<div class="scene-advance"><<link "Leave <<= _himher>> to it">>
<<run setup.companionToyReliefResolve('watch')>>
<<goto "SleepingQuarters">>
<</link>></div>
</div>
</div>
<</if>><<if not $companion>>
<<goto "SleepingQuarters">>
<<else>>
<<set _c to $companion>>
<<run setup.companionEnsure(_c)>>
<<set _male to (setup.companionGender(_c) neq 'female')>>
<<set _heshe to (_male ? 'he' : 'she')>>
<<set _hisher to (_male ? 'his' : 'her')>>
<<set _himher to (_male ? 'him' : 'her')>>
<<set _name to (_c.name or 'Your companion')>>
<<set _toy to setup.companionHeldToy(_c)>>
<<set _toyname to (_toy ? _toy.name.toLowerCase() : 'toy')>>
<<set _acts to setup.companionSexActs(_c)>>
<div class="npc-scene is-comp">
<div class="npc-scene-step">
<p class="action-narration">You cross the room and take the <<= _toyname>> out of <<= _hisher>> hand. <<= _name>> whines at the empty second, then gets it, grinning before you've even got a knee on the mattress.</p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">finally.. come on then, do something about it</span></div>
<<if _acts.length>>
<<for _ai, _act range _acts>>
<<capture _act>>
<<if _act.off>>
<div class="scene-advance is-off"><span class="sa-label"><<print _act.label>></span><span class="sa-why"><<print _act.off>></span></div>
<<else>>
<div class="scene-advance"><<link _act.label>><<set $sexScene to _act>><<set $sexToy to (_toy ? _toy.id : null)>><<set $sexReturn to "SleepingQuarters">><<goto "CompanionSexAct">><</link>></div>
<</if>>
<</capture>>
<</for>>
<<else>>
<div class="scene-advance"><<linkreplace "Take over and finish <<= _himher>> off">>
<<set _femMedia to setup.companionToyMedia(_c, (_toy ? _toy.id : 'dildo'), true)>>
<<if _femMedia>><div class="npc-scene-media"><<= setup.mediaTag(_femMedia)>></div><</if>>
<p class="action-narration">You take the toy over and work <<= _himher>> through it the way <<= _heshe>> was too impatient to manage alone, until <<= _heshe>>'s clenching around it and soaking the sheets with your name half-broken in <<= _hisher>> mouth.</p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">*mphh* ..okay. okay. you can find me toys any time you want</span></div>
<<run setup.companionToyReliefResolve('join')>>
<<run setup.hapFinish && setup.hapFinish('cum')>>
<div class="scene-advance is-keep"><<link "Head back out">><<run setup.hapOff && setup.hapOff()>><<goto "SleepingQuarters">><</link>></div>
<</linkreplace>></div>
<</if>>
</div>
</div>
<</if>><<if not setup.isOnStairs()>>
<<goto "FacilityRoom">>
<<else>>
<<set $useMessage to null>>
<<set _g to ($body and $body.gender) or 'male'>>
<<set _female to (_g eq 'female')>>
<<set _plugged to ($player.gear and $player.gear.plug)>>
<<if _female>>
<<set _hole to (_plugged ? 'vag' : (Math.random() lt 0.5 ? 'anal' : 'vag'))>>
<<else>>
<<set _hole to 'anal'>>
<</if>>
<<set _media to setup.stairsDildoMedia(_hole)>>
<<set _dark to setup.stairsDark()>>
<<set _night to setup.stairsNight()>>
<<set _slave to (setup.stairsSlave() ? true : false)>>
<<set _catchP to 0.22 + (_dark ? 0.30 : 0) + (_night ? 0.10 : 0) + (_slave ? 0.20 : 0)>>
<<set _caught to (Math.random() lt _catchP)>>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration">Your legs aren't carrying you up another flight with the ache sitting this low, so you drop onto a step where the stairwell turns and dig the dildo out of your kit. Nobody's supposed to be down here. That's half of why you're doing it here.</p>
<div class="scene-advance"><<linkreplace "Sit back on the cold step and work it in">>
<div class="npc-scene-step">
<<if _media>><div class="npc-scene-media"><<= setup.mediaTag(_media)>></div><</if>>
<p class="action-narration"><<if _female>>You get the head of it lined up and sink down onto it in one slow drop, the metal step freezing under your ass and the stretch making you grab the railing so you don't slide off. *mmh* you set a rhythm and chase it, hips working, every bounce echoing off the concrete louder than you mean it to.<<else>>You brace a foot two steps down and ease yourself back onto it, the stretch pulling a noise out of you that the stairwell throws right back. *nngh* you ride it slow then not slow, one hand white-knuckled on the rail, not caring how much sound you're making.<</if>></p>
<div class="scene-advance"><<linkreplace "Chase it harder">>
<<if _caught>>
<<set _cm to setup.stairsCaughtMedia(_female ? 'anal' : 'anal')>>
<<run setup.npcShakeFx()>>
<div class="npc-scene-step">
<p class="action-narration is-tense">A torch beam swings up from the flight below. Another scavenger, some other slave the company dumped on this same dead facility, and you never heard them over your own noise. By the time the light finds you it's too late to play it off, ass full, toy still in your hand.</p>
<div class="npc-line is-slave"><span class="speaker">Scavenger</span><span class="speech">heh.. they really do send you out here with everything you need. shove over</span></div>
<<if _cm>><div class="npc-scene-media"><<= setup.mediaTag(_cm)>></div><</if>>
<p class="action-narration is-impact">THE TOY'S OUT OF YOUR HAND AND THEY'RE IN BEHIND IT BEFORE IT HITS THE STEP. *thwap* They fold you down over the edge and use the hole you already had open, and you take it, because a slave caught on a stairwell with their pants down doesn't get to tell another one no.</p>
<div class="scene-advance"><<link "Peel yourself up off the steps">><<run setup.stairsApplyCaught('anal')>><<run setup.stairsConsumeDildo()>><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<<else>>
<<set _fm to setup.stairsDildoMedia(_hole)>>
<div class="npc-scene-step">
<<if _fm>><div class="npc-scene-media"><<= setup.mediaTag(_fm)>></div><</if>>
<p class="action-narration"><<if _female>>You ride it down to the base and grind there, shaking, and it goes through you in waves that leave you slumped against the railing with your thighs still twitching. *pant* Nobody came. This time.<<else>>You work it deep and let it tip you over, spilling onto the step between your feet, and you sit there breathing through it with the toy still buried while the stairwell goes quiet again. *pant* Nobody came. This time.<</if>></p>
<div class="scene-advance"><<link "Tuck it away and keep climbing">><<run setup.stairsApplyConsensual({ minutes: 12, energy: 10 })>><<run setup.stairsConsumeDildo()>><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</if>>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
</div>
</div>
<</if>><<if not $stairsScene>>
<<goto "FacilityRoom">>
<<else>>
<<set _kind to $stairsScene.kind>>
<<set _bottom to ($stairsScene.bottom or 'female')>>
<<set _bf to (_bottom eq 'female')>>
<<set _heshe to (_bf ? 'she' : 'he')>>
<<set _himher to (_bf ? 'her' : 'him')>>
<<set _hisher to (_bf ? 'her' : 'his')>>
<<set _c to $companion>>
<<set _name to ((_c and _c.name) or 'your companion')>>
<div class="npc-scene is-slave">
<<switch _kind>>
<<case "companion_toy">>
<<set _tm to (_bf ? setup.pickMedia('stairs_dildo_f_vag') : setup.pickMedia('stairs_dildo_m'))>>
<div class="npc-scene-step">
<p class="action-narration">You crest the landing and there's <<= _name>>, backed into the corner of the stairwell with a toy out, riding it down onto the cold floor like the climb wound <<= _himher>> up too much to make the next landing without dealing with it.</p>
<<if _tm>><div class="npc-scene-media"><<= setup.mediaTag(_tm)>></div><</if>>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">*mmh* don't just stand there.. either keep walking or get over here</span></div>
<div class="scene-advance"><<linkreplace "Step around <<= _himher>> and keep climbing">>
<p class="action-narration is-cold">You step over <<= _hisher>> outstretched leg and keep going. <<= _name>> laughs low behind you and doesn't stop what <<= _heshe>>'s doing.</p>
<div class="scene-advance"><<link "Keep climbing">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<div class="scene-advance"><<linkreplace "Take the toy off <<= _himher>> and do it yourself">>
<<set _jm to (_bf ? setup.stairsTopMedia('female') : setup.pickMedia('stairs_oral_white'))>>
<div class="npc-scene-step">
<<if _jm>><div class="npc-scene-media"><<= setup.mediaTag(_jm)>></div><</if>>
<p class="action-narration"><<if _bf>>You pull the toy out of <<= _himher>> and bend <<= _himher>> over the steps, and <<= _heshe>> goes down onto the edge of one with a grin and lets you give it to <<= _himher>> properly. *plap* *plap* The stairwell carries every slap of it.<<else>>You take the toy out of <<= _hisher>> hand and put your cock in <<= _hisher>> mouth instead, and <<= _heshe>> takes it kneeling on the step looking up at you, working you until you finish down <<= _hisher>> throat.<</if>></p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">*mphh* ..yeah, that's better than the toy</span></div>
<<run setup.stairsApplyConsensual({ minutes: 14, energy: 12, companion: _c, bond: 3 })>>
<div class="scene-advance"><<link "Pull <<= _himher>> up and keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
</div>
<<case "companion_tease">>
<<set _descend to (Math.random() lt 0.5)>>
<<set _tm to (_descend ? setup.pickMedia('stairs_tease_descend') : setup.pickMedia('stairs_tease_climb'))>>
<div class="npc-scene-step">
<<if _descend>>
<p class="action-narration">You stop on the landing and <<= _name>> comes down the flight toward you with nothing on, taking it slow, tits moving with every step, holding your eyes the whole way because <<= _heshe>> knows exactly where you're looking.</p>
<<else>>
<p class="action-narration"><<= _name>> is a flight ahead of you, and <<= _heshe>> knows you're watching, because <<= _heshe>> slows down and hooks a thumb in <<= _hisher>> waistband and gives you a long look at what's under it before carrying on up.</p>
<</if>>
<<if _tm>><div class="npc-scene-media"><<= setup.mediaTag(_tm)>></div><</if>>
<div class="scene-advance"><<linkreplace "<<if _descend>>Let <<= _himher>> reach you and fall in step<<else>>Watch <<= _himher>> climb and let it go<</if>>">>
<p class="action-narration is-cold">You let <<= _himher>> have the moment and move with <<= _himher>>, and the grip on you eases the second you do.</p>
<div class="scene-advance"><<link "Keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<<if _bf>>
<div class="scene-advance"><<linkreplace "<<if _descend>>Bend <<= _himher>> over the rail right here<<else>>Catch up and bend <<= _himher>> over the rail<</if>>">>
<<set _fm to setup.stairsTopMedia('female')>>
<div class="npc-scene-step">
<<if _fm>><div class="npc-scene-media"><<= setup.mediaTag(_fm)>></div><</if>>
<p class="action-narration">You take the stairs two at a time and fold <<= _himher>> over the railing before <<= _heshe>> reaches the landing, and <<= _heshe>> arches back into it grinning. *plap* *plap* You give it to <<= _himher>> right there on the steps.</p>
<<run setup.stairsApplyConsensual({ minutes: 14, energy: 12, companion: _c, bond: 3 })>>
<div class="scene-advance"><<link "Catch your breath and keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
<</if>>
<<if _bf and $body.gender eq 'male' and not setup.isCaged()>>
<div class="scene-advance"><<linkreplace "Back <<= _himher>> into the rail and feed it to <<= _himher>>">>
<<set _om to setup.pickMedia('stairs_oral_white')>>
<div class="npc-scene-step">
<<if _om>><div class="npc-scene-media"><<= setup.mediaTag(_om)>></div><</if>>
<p class="action-narration">You catch up and back <<= _himher>> into the railing, and <<= _heshe>> reads it and drops onto a step with your cock in <<= _hisher>> mouth before you've even said anything. *slurrp* *slurrrp* The stairwell throws every wet sound of it back at you while <<= _heshe>> works you, and you hold the cold rail and let <<= _himher>> take you down <<= _hisher>> throat.</p>
<div class="scene-advance"><<link "Catch your breath and keep climbing">><<run setup.stairsApplyConsensual({ minutes: 12, energy: 10, companion: _c, bond: 2 })>><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
<</if>>
</div>
<<case "faggr">>
<<set _fm to setup.pickMedia('stairs_faggr')>>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-tense">Another scavenger comes off the landing above you fast and you don't get a hand up in time. She's a slave like you, suit stripped to the waist and not here for the scrap, and she's got you headlocked and folded down onto the steps before you've worked out what's happening.</p>
<<if _fm>><div class="npc-scene-media"><<= setup.mediaTag(_fm)>></div><</if>>
<p class="action-narration is-impact">SHE SWALLOWS YOUR COCK WHERE YOU LIE. *slurrp* *gulp* She works you with your arm still pinned under her and doesn't let up until you're spilling down her throat, and then she's up the stairs and gone, back to whatever rock the company dropped her on.</p>
<div class="scene-advance"><<link "Get your legs back under you">><<run setup.stairsApplyConsensual({ minutes: 10, energy: 14 })>><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<<case "trip_them">>
<<set _pm to (_bf ? setup.pickMedia('stairs_present_f') : setup.pickMedia('stairs_present_m'))>>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-tense"><<= (_c and _c.name) ? _c.name : 'Your companion'>> misses a step ahead of you and goes down onto the stairs hard, catching <<= _hisher>> weight on <<= _hisher>> hands, ass up and legs splayed across two steps, looking back at you over <<= _hisher>> shoulder.</p>
<<if _pm>><div class="npc-scene-media"><<= setup.mediaTag(_pm)>></div><</if>>
<div class="scene-advance"><<linkreplace "Help <<= _himher>> up">>
<p class="action-narration">You get a hand under <<= _hisher>> arm and haul <<= _himher>> back to <<= _hisher>> feet. <<= _heshe.toUpperFirst()>> mutters a thanks and checks <<= _hisher>> knees, and you keep going.</p>
<<if setup.companionBond>><<run setup.companionBond(2, 'stairs_help')>><</if>>
<div class="scene-advance"><<link "Keep climbing">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<<if _bf>>
<div class="scene-advance"><<linkreplace "Take <<= _himher>> in the pose <<= _heshe>> landed in">>
<<set _fm to setup.stairsTopMedia('female')>>
<div class="npc-scene-step">
<<if _fm>><div class="npc-scene-media"><<= setup.mediaTag(_fm)>></div><</if>>
<p class="action-narration"><<= _heshe.toUpperFirst()>>'s already presented for you and you don't waste it, stepping up behind <<= _himher>> and sliding in before <<= _heshe>>'s got <<= _hisher>> breath back. <<= _heshe.toUpperFirst()>> drops <<= _hisher>> chest to the step and lets you. *plap* *plap*</p>
<<run setup.stairsApplyConsensual({ minutes: 13, energy: 12, companion: _c, bond: 2 })>>
<div class="scene-advance"><<link "Pull <<= _himher>> up after">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
<</if>>
</div>
<<case "trip_you">>
<<set _pf to ($body and $body.gender eq 'female')>>
<<set _pm to (_pf ? setup.pickMedia('stairs_present_f') : setup.pickMedia('stairs_present_m'))>>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-tense">Your foot finds an edge that isn't where you thought it was and you go down across the steps, catching yourself on your hands with your ass in the air and everything you've got on display to whatever's behind you.</p>
<<if _pm>><div class="npc-scene-media"><<= setup.mediaTag(_pm)>></div><</if>>
<<if $stairsScene.danger>>
<p class="action-narration is-cold">Something shifts on the flight below you. A boot on grit. Whoever else has been working these floors just got the full view, and they're coming up, not away.</p>
<div class="scene-advance"><<linkreplace "Pick yourself up quick">>
<<if setup.stairsScrambleRoll()>>
<p class="action-narration">You get a boot under you and take the rest of the flight three at a time with your heart slamming, and they don't chase it. Their laugh follows you up instead, low and unhurried, like they know the stairs will hand you to them some other day.</p>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<div class="scene-advance"><<link "Keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<<else>>
<<run setup.npcShakeFx()>>
<<if _pf>><<set _gm to setup.pickMedia('stairs_grab_f')>><<if _gm>><div class="npc-scene-media"><<= setup.mediaTag(_gm)>></div><</if>><</if>>
<p class="action-narration is-impact">A HAND CLOSES ON YOUR ANKLE AND DRAGS YOU BACK DOWN THE TWO STEPS YOU'D MADE. *thud* Your chin hits the edge and by the time your head clears there's a weight settling over your back that isn't going anywhere.</p>
<div class="scene-advance"><<linkreplace "There's no getting up from this">>
<<set _cm to setup.stairsCaughtMedia('anal')>>
<<if _cm>><div class="npc-scene-media"><<= setup.mediaTag(_cm)>></div><</if>>
<p class="action-narration">You went down presented and they take it for the offer it looks like, working you right there on the steps with your fingers hooked over an edge and the stairwell throwing every sound of it back down at you.</p>
<<run setup.stairsApplyCaught('anal')>>
<div class="scene-advance"><<link "Pick yourself up when it lets you">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<</if>>
<</linkreplace>></div>
<div class="scene-advance"><<linkreplace "Stay down and let what happens happen">>
<<set _cm2 to setup.stairsCaughtMedia('anal')>>
<<if _cm2>><div class="npc-scene-media"><<= setup.mediaTag(_cm2)>></div><</if>>
<p class="action-narration">You don't move. You hear them stop behind you, read the pose for what you're making it, and then their hands are on your hips and you get exactly what staying down asks for, hard enough that you're grateful for the step under your chest.</p>
<<run setup.stairsApplyCaught('anal')>>
<<run setup.bumpFem(2)>>
<div class="scene-advance"><<link "Pick yourself up after">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<<else>>
<p class="action-narration is-cold">For a second nothing happens. The stairwell's empty. You're just down here on all fours feeling stupid.</p>
<div class="scene-advance"><<link "Get up and brush it off">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</if>>
</div>
<<case "stranger">>
<<set _sgF to (($stairsScene.strangerGender or 'female') eq 'female')>>
<<set _pMale to ($body and $body.gender eq 'male')>>
<div class="npc-scene-step">
<<if _sgF>>
<<set _tm2 to setup.pickMedia(Math.random() lt 0.75 ? 'stairs_tease_climb' : 'stairs_tease_descend')>>
<p class="action-narration">There's another scavenger on the flight ahead of you, suit peeled to the waist and not in any hurry, and she's taking the stairs slow enough that it's clearly for your benefit, looking back down at you between steps.</p>
<<if _tm2>><div class="npc-scene-media"><<= setup.mediaTag(_tm2)>></div><</if>>
<div class="npc-line is-slave"><span class="speaker">Stranger</span><span class="speech">you gonna stare the whole climb or make it worth the stop?</span></div>
<div class="scene-advance"><<linkreplace "Leave her to her climb">>
<p class="action-narration is-cold">You keep your pace and pass her on the wide side of the landing. She laughs at your back, not unkindly, and goes back to her floor.</p>
<div class="scene-advance"><<link "Keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<<if _pMale and not setup.isCaged()>>
<div class="scene-advance"><<linkreplace "Take her up on it">>
<<set _prm to setup.pickMedia('stairs_present_f')>>
<div class="npc-scene-step">
<p class="action-narration">She hears you change gear on the steps and doesn't run, just gets her knees on a stair and her chest on the one above it and presents like she's done this in stairwells before.</p>
<<if _prm>><div class="npc-scene-media"><<= setup.mediaTag(_prm)>></div><</if>>
<div class="scene-advance"><<linkreplace "Give it to her on the steps">>
<<set _fm2 to setup.pickMedia('stairs_fuck_white_f')>>
<<if _fm2>><div class="npc-scene-media"><<= setup.mediaTag(_fm2)>></div><</if>>
<p class="action-narration">You take her right there with a fistful of her suit for grip. *plap* *plap* She pushes back into every stroke and swears at the concrete, and when you finish she stays down a few breaths longer than she needs to before pulling her suit back up.</p>
<div class="npc-line is-slave"><span class="speaker">Stranger</span><span class="speech">*hah*.. okay. good climb. get off my rock before my quota's short</span></div>
<<run setup.stairsApplyConsensual({ minutes: 16, energy: 14 })>>
<div class="scene-advance"><<link "Catch your breath and move on">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
<<elseif not _pMale>>
<div class="scene-advance"><<linkreplace "Climb up after her and get your hands on her">>
<<set _ffm to setup.pickMedia('stairs_ff')>>
<div class="npc-scene-step">
<<if _ffm>><div class="npc-scene-media"><<= setup.mediaTag(_ffm)>></div><</if>>
<p class="action-narration">You catch her two steps up and she's already laughing when you drag her waistband down and put your face in her from behind. *slurp* She grips the rail and rides your mouth right there on the flight, and neither of you keeps quiet about it.</p>
<<run setup.stairsApplyConsensual({ minutes: 12, energy: 8 })>>
<div class="scene-advance"><<link "Let her go on her way">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance"><span class="bazaar-soon">Take her up on it · the cage says no</span></div>
<</if>>
<<else>>
<<set _pmm to setup.pickMedia('stairs_present_m')>>
<p class="action-narration">You come around the half-landing and there's another slave face-down over the steps, suit shoved to his knees, ass up and working himself like the empty stairwell was the closest thing this facility has to privacy. He hears you and freezes, but he doesn't get up.</p>
<<if _pmm>><div class="npc-scene-media"><<= setup.mediaTag(_pmm)>></div><</if>>
<div class="npc-line is-slave"><span class="speaker">Stranger</span><span class="speech">..either keep walking or do something about it, you're wrecking the acoustics</span></div>
<div class="scene-advance"><<linkreplace "Keep walking">>
<p class="action-narration is-cold">You step around him and take the rest of the flight. Behind you he picks his rhythm back up before you've even cleared the landing.</p>
<div class="scene-advance"><<link "Keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
<<if _pMale and not setup.isCaged()>>
<div class="scene-advance"><<linkreplace "Take his ass on the flight">>
<<set _mmf to setup.pickMedia('stairs_fuck_white_m')>>
<div class="npc-scene-step">
<<if _mmf>><div class="npc-scene-media"><<= setup.mediaTag(_mmf)>></div><</if>>
<p class="action-narration">He's already presented and already slick, so you kick his knees a little wider and take him bent over the steps, pressing down between his shoulders. *plap* *plap* He gives it up loud, forehead on the stair, pushing back like he tripped here on purpose.</p>
<<run setup.stairsApplyConsensual({ minutes: 14, energy: 12 })>>
<div class="scene-advance"><<link "Leave him where he wanted to be">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
</div>
<</linkreplace>></div>
<</if>>
<</if>>
</div>
<<case "ambush">>
<<set _female3 to ($body and $body.gender eq 'female')>>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-tense">Halfway up the dark flight a hand closes on the back of your neck and walks you face-first into the railing. Same suit as yours, same dead facility. With the power out they got the whole flight on you before you knew anyone was there. The grip on your neck is testing how much fight you've got.</p>
<div class="scene-advance"><<linkreplace "Throw your weight back and break the hold">>
<<if setup.stairsScrambleRoll()>>
<p class="action-narration is-impact">YOUR ELBOW FINDS SOMETHING SOFT. *thud* The grip's gone and you're three steps up before they've finished swearing, and they don't follow you into the dark.</p>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<div class="scene-advance"><<link "Keep climbing and don't look back">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<<else>>
<<set _cm to setup.stairsCaughtMedia(_female3 ? 'anal' : 'oral')>>
<p class="action-narration is-impact">YOU BUCK AND IT COSTS YOU. *thwap* They fold you harder over the rail for trying, and the fight you had goes out through your hands into the cold metal.</p>
<<if _cm>><div class="npc-scene-media"><<= setup.mediaTag(_cm)>></div><</if>>
<p class="action-narration">They take what the stairwell handed them and you ride it out gripping the rail, because the only other way off these steps is the fall.</p>
<<run setup.stairsApplyCaught(_female3 ? 'anal' : 'oral')>>
<div class="scene-advance"><<link "Find the rail and keep climbing">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</if>>
<</linkreplace>></div>
<div class="scene-advance"><<linkreplace "Go still and let them take it">>
<<set _cm3 to setup.stairsCaughtMedia(_female3 ? 'anal' : 'oral')>>
<<if _cm3>><div class="npc-scene-media"><<= setup.mediaTag(_cm3)>></div><</if>>
<p class="action-narration">You stop fighting the grip and they feel it, and the hand on your neck gentles into something worse. They bend you over the rail in the dark and take their time about it, and the sound goes everywhere and nowhere down here.</p>
<<run setup.stairsApplyCaught(_female3 ? 'anal' : 'oral')>>
<<run setup.bumpFem(2)>>
<div class="scene-advance"><<link "Straighten up when it's done">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<</linkreplace>></div>
</div>
<<case "chase">>
<div class="npc-scene-step">
<p class="action-narration is-tense">You hit the stairwell with it coming down the corridor behind you and take the flight blind, two and three steps at a time, one hand skidding along the rail. The steps don't care how fast you need them to be.</p>
<div class="scene-advance"><<linkreplace "Don't miss a step">>
<<if setup.stairsScrambleRoll()>>
<p class="action-narration">Your boots hold. You come off the last step onto the new floor still moving flat out, and the sound behind you breaks off somewhere above, because whatever it is, it doesn't do stairs the way panic does.</p>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<div class="scene-advance"><<link "Keep moving">><<set $stairsScene to null>><<goto "FacilityRoom">><</link>></div>
<<else>>
<<run setup.npcShakeFx()>>
<p class="action-narration is-impact">THE EDGE TAKES YOUR FOOT OUT. *thud* You go down the last half-flight on your hands and knees, and it comes down after you unhurried now, because you're not going anywhere.</p>
<<run setup.stairsChaseMiss()>>
<div class="scene-advance"><<link "It has you">><<set $stairsScene to null>><<goto "ChaseCaught">><</link>></div>
<</if>>
<</linkreplace>></div>
</div>
<<default>>
<<set $stairsScene to null>>
<<goto "FacilityRoom">>
<</switch>>
</div>
<</if>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.40 })>>
<<run setup.setAmbient('music', 'Sounds/music/ship_lofi.mp3', { volume: 0.22, fadeInMs: 1200 })>>
<<run setup.stopAmbient('scan')>>
<div class="ship-header">BATHROOM</div>
<<roomImage "ship_bathroom">>
<div class="ship-desc">
The retrofit still smells like fresh sealant. A shower stall takes up the middle of the room behind a dark glass door, the head angled down from the ceiling, and the water runs hot within seconds of asking for it. Steel sink on the left under a mirror you can actually see yourself in. The toilet's bolted against the right wall, and after months of station facilities, having your own feels like outright luxury.
</div>
<<set _cInShower to ($companion and $companion.aboard and $companion.showerDue and not $companion.ko and not $companion.caught)>>
<<set _cShowerScene to null>>
<<if _cInShower>><<set _cShowerScene to setup.shipSpyTakeScene()>><</if>>
<div class="ship-actions">
<<if _cShowerScene>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label"><<print $companion.name>> is in the shower</span><span class="action-hint">She just got in off the run</span>'>>
<<set $shipShowerEnc to _cShowerScene>>
<<goto "ShipBathroomPeek">>
<</link>>
</div>
<</if>>
<<if _cInShower>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Take a hot shower</span><span class="action-hint"> — occupied. One stall, one person, and she got there first</span></div>
<<elseif setup.playerIsMessy() or $player.lust gte setup.SHOWER_RELIEF_LUST>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Take a hot shower</span><span class="action-hint">Wash everything off you, and out of you</span>'>>
<<goto "ShipShower">>
<</link>>
</div>
<<else>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Take a hot shower</span><span class="action-hint"> — you're clean and calm, and Tsu's water pump has a duty cycle</span></div>
<</if>>
<<if setup.isSlimed()>>
<<if setup.slimeHasRisen()>>
<div class="disabled-action"><span class="action-label">Use the toilet</span><span class="action-hint"> — it's up in you now, nothing left down there to give the drain</span></div>
<<elseif setup.slimeIsSealed()>>
<div class="disabled-action"><span class="action-label">Use the toilet</span><span class="action-hint"> — nothing gets past the plug, take it out first</span></div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Use the toilet</span><span class="action-hint">Push it out over the drain, where nothing can grow</span>'>>
<<run setup.openSlimeToiletDialog()>>
<<goto "ShipBathroom">>
<</link>>
</div>
<</if>>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Back to the quarters</span><span class="action-hint">Through the hatch</span>'>><<goto "SleepingQuarters">><</link>>
</div>
</div>
<<set _enc to setup.shipShowerCompose()>>
<<set $shipShowerEnc to _enc>>
<<set _relief to (_enc ? { kind: 'wash' } : setup.showerReliefPick())>>
<<set _female to ($body and $body.gender) eq 'female'>>
<<run setup.showerClean(_relief.kind eq 'toy' or _relief.kind eq 'hand')>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<p class="action-narration">Tsu's retrofit runs real hot water with no duty-cycle stutter to argue with. You stand in it and watch the whole run swirl off you into the drain. Having a shower of your own still feels like something the company forgot to bill you for.</p>
<<if _relief.kind eq 'toy' and _relief.id eq 'dildo'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">With the door sealed and nobody metering the tank, the dildo comes out of the bag, and you take your time with it for once, easing yourself down onto it on the warm tile and riding it slow because nothing out here is chasing you, until your thighs give their notice.<<if _relief.last>> It goes quiet halfway through the afterglow, and that was the last of it.<</if>></p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'toy' and _relief.id eq 'fleshlight'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">It's your ship and the walls don't talk, so the fleshlight comes out. You fuck it braced against the fogged glass until it milks you empty, and the spray rinses the sleeve clean while it's still in your hand.<<if _relief.last>> There's not much left in it after that one.<</if>></p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'hand' and _female>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">Nothing in the bag and nowhere to be. You sit down on the seat still dripping and take the long way about it, and the finish rolls up through you slow instead of landing like a deadline.</p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'hand'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">Nothing in the bag, so it's just you and water that's hot for once. The door's yours and so is the tank, so you take your time over it, and you finish into the spray and watch it go.</p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'denied'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_m_shower_rear'))>></div>
<p class="action-narration">The want sits under the cage like a trapped wasp and the hot water only gives it ideas. You run the tank down to the complaint light anyway, step out still buzzing, and file the whole thing under problems Tsu's bench can't fix.</p>
<<elseif _female>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_solo_shower_female'))>></div>
<p class="action-narration">You wash your hair twice because you can, and stand with your face in the spray until the heater hums somewhere in the wall, and when you step out you smell like nothing the planet put on you.</p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<<elseif ($body.chest gte 2)>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(($player.gear and $player.gear.plug) ? 'bth_m_plug_shower' : 'bth_m_shower_rear'))>></div>
<p class="action-narration">You take the wash slow, letting the heat work down through muscle the suit's been arguing with all week, and by the end the mirror's too fogged to have an opinion about you.</p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(($player.gear and $player.gear.plug) ? 'bth_m_plug_shower' : (setup.isCaged() ? 'bth_m_shower_rear' : 'bth_solo_shower_male')))>></div>
<p class="action-narration">You wash the run off slow and stay under the heat until your shoulders forget the shape of the suit, and getting dressed after feels like picking up somebody else's problem.<<if $player.gear and $player.gear.plug>> The plug rides through the whole thing, jeweled end throwing water, and you leave it where it is.<</if>></p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<</if>>
<<if _enc and _enc.kind eq 'joined'>>
<p class="action-narration is-tense">The bathroom door opens without a knock, because knocking is for ships with more than two people on them.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _enc.name>></span><span class="speech"><<print _enc.offerLine>></span></div>
<div id="shower-offer">
<div class="scene-advance"><<link "Hand over the soap">><<replace "#shower-offer">>
<div class="npc-scene-media"><<print setup.mediaTag($shipShowerEnc.washClip)>></div>
<p class="action-narration"><<print $shipShowerEnc.washLine>></p>
<<if $shipShowerEnc.washFinished>><<run State.variables.player.lust = 0>><</if>>
<div class="scene-advance"><<link `$shipShowerEnc.escLabel`>><<set $shipShowerEnc.entry to 'wash'>><<goto "ShipShowerJoined">><</link>></div>
<div class="scene-advance"><<linkreplace "Leave it there">>
<p class="action-narration">You leave it there. She finishes your back for real before she goes, knuckles digging the week out of it.</p>
<div class="npc-line is-comp"><span class="speaker"><<print $shipShowerEnc.name>></span><span class="speech">Same time tomorrow, maybe.</span></div>
<<run (function(){ var c = State.variables.companion; if (c) { c.bond = (c.bond || 0) + 1; c.lust = Math.min(100, (c.lust || 0) + 15); } })()>>
<div class="scene-advance is-keep">
<<link "Towel off">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
<</replace>><</link>></div>
<<if ($player.lust gte 60) or ($companion and ($companion.lust or 0) gte 60)>>
<div class="scene-advance"><<link "Skip the soap">><<set $shipShowerEnc.entry to 'direct'>><<goto "ShipShowerJoined">><</link>></div>
<<else>>
<div class="scene-advance bazaar-soon">Skip the soap <span class="action-hint">nobody's wound up enough to rush this</span></div>
<</if>>
</div>
<<elseif _enc and _enc.kind eq 'intruder'>>
<p class="action-narration is-tense">Then the water pressure dips for half a second, the way it does when weight comes up the ramp.</p>
<div class="scene-advance"><<link "Kill the water and listen">><<goto "ShipShowerIntruder">><</link>></div>
<<else>>
<<set _spy to ($companion and $companion.aboard and not $companion.ko and not $companion.caught and Math.random() lt 0.15)>>
<<if _spy>>
<p class="action-narration is-tense">And then, reaching for the towel, you catch it: the hatch is cracked two fingers wide, and there's an eye on the other side of the gap that doesn't belong to the ship.</p>
<div class="scene-advance"><<link "Snap at them">><<set $shipShowerEnc to setup.shipSpyTakeScene()>><<if $shipShowerEnc>><<goto "ShipShowerSpyTake">><<else>><<goto "ShipBathroom">><</if>><</link>></div>
<div class="scene-advance"><<linkreplace "Pretend you didn't see">>
<p class="action-narration">You dry off slow, giving the show a proper ending, and the hatch eases shut partway through, and you both carry that into tomorrow without a word.</p>
<<run (function(){ var c = State.variables.companion; if (c) c.lust = Math.min(100, (c.lust || 0) + 20); })()>>
<div class="scene-advance is-keep">
<<link "Towel off">><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-keep">
<<link "Towel off">><<goto "ShipBathroom">><</link>>
</div>
<</if>>
<</if>>
</div></div>
<<run (function(){ var c = State.variables.companion; if (c) c.showerDue = false; })()>>
<<set _e to $shipShowerEnc>>
<<if not _e>>
<<goto "ShipBathroom">>
<<else>>
<div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration">The glass is fogged solid except where a shoulder keeps wiping it clear, and the shape behind it hasn't heard you over the water. <<print (_e.name or "Someone")>>, using up your hot water, humming something with no tune in it.</p>
<div id="peek-choice">
<div class="scene-advance"><<link "Watch from the doorway">><<replace "#peek-choice">>
<<if $shipShowerEnc.peekClip>>
<div class="npc-scene-media"><<print setup.mediaTag($shipShowerEnc.peekClip)>></div>
<</if>>
<p class="action-narration">You lean on the frame and take the show for what it is. Steam, soap, a body that has no idea it has an audience. You file the picture somewhere the company can't repossess it.</p>
<<run (function(){ State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 15); })()>>
<div class="scene-advance"><<link "Step in with them">><<goto "ShipShowerSpyJoin">><</link>></div>
<div class="scene-advance is-keep">
<<link "Leave them to it">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</replace>><</link>></div>
<div class="scene-advance"><<link "Step in with them">><<goto "ShipShowerSpyJoin">><</link>></div>
</div>
</div></div>
<</if>>
<<set _e to $shipShowerEnc>>
<<if not _e>>
<<goto "ShipBathroom">>
<<else>>
<<run setup.showerClean(true)>>
<<run (function(){ var c = State.variables.companion; if (c) c.lust = Math.max(0, (c.lust || 0) - 25); State.variables.player.lust = 0; })()>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<p class="action-narration">You strip on the way across the floor and pull the glass aside, and the yelp lasts exactly as long as it takes to see it's you.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _e.name>></span><span class="speech">You could KNOCK... no, forget it, get in before the heat goes.</span></div>
<div class="scene-advance"><<linkreplace "Get in">>
<div class="npc-scene-media"><<print setup.mediaTag(_e.clip)>></div>
<p class="action-narration"><<print _e.actLine>></p>
<div class="scene-advance"><<linkreplace "Let the water run">>
<p class="action-narration"><<print _e.afterLine>></p>
<div class="scene-advance is-keep">
<<link "Towel off">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div></div>
<</if>>
<<set _e to $shipShowerEnc>>
<<if not _e>>
<<goto "ShipBathroom">>
<<else>>
<<run setup.showerClean(true)>>
<<run (function(){ var c = State.variables.companion; if (c) c.lust = Math.max(0, Math.min(100, (c.lust || 0) + 10)); State.variables.player.lust = 0; if (typeof setup.advanceMinutes === 'function') setup.advanceMinutes(20); })()>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<<if _e.entry eq 'direct'>>
<p class="action-narration"><<if _e.cGender eq 'female'>>She reads your face and the suit's already coming off her, one wet footprint after another into the steam, and there's no washing phase at all this time.<<else>>He doesn't need it spelled out. The suit drops where he stands, and then his weight walks you back into the glass.<</if>></p>
<<else>>
<p class="action-narration"><<if _e.cGender eq 'female'>>The soap hits the floor somewhere and stays there, because her hands have stopped pretending and so have yours.<<else>>The soap ends up on the floor and neither of you goes after it. His grip shifts on your hip and settles somewhere washing has no excuse for.<</if>></p>
<</if>>
<div class="npc-scene-media"><<print setup.mediaTag(_e.clip)>></div>
<p class="action-narration"><<print _e.actLine>></p>
<div class="scene-advance"><<linkreplace "Catch your breath">>
<p class="action-narration"><<print _e.afterLine>></p>
<div class="npc-line is-comp"><span class="speaker"><<print _e.name>></span><span class="speech">Mm. Good shower. We're doing water rations next week by the way.</span></div>
<div class="scene-advance is-keep">
<<link "Towel off">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
</div></div>
<</if>>
<<set _e to $shipShowerEnc>>
<<if not _e>>
<<goto "ShipBathroom">>
<<else>>
<<run setup.showerClean(true)>>
<<run (function(){ State.variables.player.lust = 0; if (typeof setup.advanceMinutes === 'function') setup.advanceMinutes(10); })()>>
<div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration">You get one hand on the tap and the room answers first: the bathroom door is already standing open, and there are wet boot-steps on the deck behind you.</p>
<p class="action-narration is-impact">HANDS CLOSE ON YOU BEFORE THE SOUND DOES.</p>
<div class="scene-advance"><<linkreplace "There's nowhere to go">>
<div class="npc-scene-media"><<print setup.mediaTag(_e.clip)>></div>
<p class="action-narration"><<if _e.act eq 'oral'>>A suit like yours, scavver-patched. Not a word out of him. He gets a hand in your wet hair and your mouth stops being yours, the spray coming down on both of you while he uses your throat like the ship came with it. *glk* *glk*<<elseif _e.act eq 'anal'>>A suit like yours, scavver-patched. Not a word out of him. He folds you against the wet tile and opens you up on his cock a stroke at a time, and your own shower rinses the sweat off his back while he takes what he climbed the ramp for.<<elseif _e.act eq 'press'>>A suit like yours, scavver-patched. Not a word out of him. He takes you to the deck instead of the wall, knees pushed back to your shoulders, and settles his whole weight into fucking you flat against the plating, and the deck's still warm from the steam when he starts to cum in you.<<else>>A suit like yours, scavver-patched. Not a word out of him. He pins you to the wet glass and takes you standing, one hand on your throat and the spray hammering the both of you, and the noise you make just steams up the stall.<</if>></p>
<div class="scene-advance"><<linkreplace "Wait for it to be over">>
<p class="action-narration is-cold">He finishes, steps back out of the spray, and takes the ramp at a jog like a man who's done this on other ships. The water keeps running. You stand in it until you're clean again, which takes longer on the inside.</p>
<p class="action-narration">The hatch, next time, gets the bolt.</p>
<div class="scene-advance is-keep">
<<link "Towel off">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div></div>
<</if>>
<<set _e to $shipShowerEnc>>
<<if not _e>>
<<goto "ShipBathroom">>
<<else>>
<<run (function(){ var c = State.variables.companion; if (c) c.lust = Math.max(0, (c.lust || 0) - 30); State.variables.player.lust = 0; if (typeof setup.advanceMinutes === 'function') setup.advanceMinutes(15); })()>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<p class="action-narration is-tense">You cross the wet floor and yank the hatch the rest of the way open, and there they are, caught mid-lean with nowhere to put their face.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _e.name>></span><span class="speech">I was... checking the water pressure. From here. Through the gap. Okay, look...</span></div>
<div class="scene-advance"><<linkreplace "Drag them in">>
<p class="action-narration">Whatever the rest of that sentence was going to be, it drowns. You haul them into the steam suit and all, and the suit doesn't survive the negotiation.</p>
<div class="npc-scene-media"><<print setup.mediaTag(_e.clip)>></div>
<p class="action-narration"><<print _e.actLine>></p>
<div class="scene-advance"><<linkreplace "Let them up">>
<p class="action-narration"><<print _e.afterLine>></p>
<div class="npc-line is-comp"><span class="speaker"><<print _e.name>></span><span class="speech">...so anyway. Water pressure's fine.</span></div>
<div class="scene-advance is-keep">
<<link "Towel off">><<set $shipShowerEnc to null>><<goto "ShipBathroom">><</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div></div>
<</if>>
<<if not $terminalOutput or $terminalOutput.length eq 0>>
<<if setup._tsuosBootJustFinished>>
<<run setup._tsuosBootJustFinished = false>>
<<else>>
<<if $ship.upgraded>>
<<run setup.playSound('terminal_boot', { volume: 0.7 })>>
<<else>>
<<run setup.playSound('terminal_open')>>
<</if>>
<</if>>
<</if>>
<<if $ship.upgraded and not $ship.terminalBootSeen>>
<div class="terminal-screen tsuos-boot">
<div class="tsuos-boot-line l1"><span class="dim">[BIMBO STANDARD OS / SHIPBOARD v2.1]</span></div>
<div class="tsuos-boot-line l2">> override signature detected</div>
<div class="tsuos-boot-line l3">> signed by: tsu_okazaki@labrotoria-69 ............ <span class="ok">verified</span></div>
<div class="tsuos-boot-line l4">> unmounting: /boot/bimbo-default.img .............. <span class="ok">OK</span></div>
<div class="tsuos-boot-line l5">> flashing firmware: cockpit_avionics.fw ........... <span class="ok">OK</span></div>
<div class="tsuos-boot-line l6">> mounting: /boot/tsuos_kernel.img ................. <span class="ok">OK</span></div>
<div class="tsuos-boot-line l7">> loading: tsuos.bc / runtime ...................... <span class="ok">OK</span></div>
<div class="tsuos-boot-line l8">> loading: dashboard .............................. <span class="ok">OK</span></div>
<div class="tsuos-boot-line l9">> binding terminal to TsuOS.bc ..................... <span class="ok">OK</span></div>
<div class="tsuos-boot-line l10">TsuOS.bc ›› hello, <<print $player.name>>.</div>
<div class="tsuos-boot-line l11">> you have full access. type <code style="background:rgba(253,224,71,0.1);padding:1px 4px;border-radius:2px;color:#fde047;">help</code> when ready.</div>
</div>
<<timed 3.2s>>
<<set $ship.terminalBootSeen to true>>
<<run setup._tsuosBootJustFinished = true>>
<<goto "Terminal">>
<</timed>>
<<else>>
<<set _statsHtml to setup.tsuOsStatsHtml()>>
<<set _clockNow to setup.tsuOsClock()>>
<<if $ship.upgraded>>
<<set _termClass to "terminal-screen is-tsuos">>
<<set _termHost to "tsuos.bc">>
<<else>>
<<set _termClass to "terminal-screen is-tsuos is-bimbos">>
<<set _termHost to "bimbos.sys">>
<</if>>
<div @class="_termClass">
<div class="tsuos-head">
<div class="tsuos-head-brand"><<if $ship.upgraded>>TsuOS<span class="tsuos-head-dot">.</span>bc <span class="tsuos-head-version">v1.0</span><<else>>Bimb<span class="tsuos-head-dot">.</span>OS <span class="tsuos-head-version">v2.3</span><</if>></div>
<div class="tsuos-head-clock"><<print _clockNow>></div>
</div>
<div class="tsuos-side">
<div class="tsuos-user-line"><span class="tsuos-user-name"><<print $player.name>></span><span class="tsuos-at">@</span><span class="tsuos-host"><<print _termHost>></span></div>
<div class="tsuos-ascii-wrap"><pre class="tsuos-ascii" data-tsuos-ascii="1"></pre></div>
<div class="tsuos-stats"><<print _statsHtml>></div>
</div>
<<script>>
(function () {
function paint(force) {
var el = document.querySelector('.tsuos-ascii[data-tsuos-ascii="1"]');
if (!el) return;
if (!el.textContent) {
var sv = State.variables;
var upgraded = sv && sv.ship && sv.ship.upgraded;
var art = upgraded ? setup.TSUOS_ASCII : setup.BIMBOS_ASCII;
if (typeof art === 'string') el.textContent = art;
}
if (setup.fitTsuOsAscii) setup.fitTsuOsAscii(el, force);
}
function setupRO() {
if (typeof ResizeObserver !== 'function') return;
var wrap = document.querySelector('.tsuos-ascii-wrap');
if (!wrap) return;
if (setup._tsuOsAsciiRO) { try { setup._tsuOsAsciiRO.disconnect(); } catch (e) {} }
setup._tsuOsAsciiRO = new ResizeObserver(function () {
if (setup._tsuOsAsciiROq) return;
setup._tsuOsAsciiROq = true;
var run = function () { setup._tsuOsAsciiROq = false; paint(); };
if (typeof requestAnimationFrame === 'function') requestAnimationFrame(run);
else setTimeout(run, 16);
});
setup._tsuOsAsciiRO.observe(wrap);
}
function setupHistory() {
var inp = document.querySelector('.tsuos-prom input[type="text"]');
if (inp && setup.tsuOsInstallHistory) setup.tsuOsInstallHistory(inp);
}
setTimeout(function () { paint(); setupRO(); setupHistory(); }, 0);
if (typeof requestAnimationFrame === 'function') {
requestAnimationFrame(function () { requestAnimationFrame(function () { paint(); setupRO(); }); });
}
if (document.fonts && document.fonts.ready && document.fonts.ready.then) {
document.fonts.ready.then(function () { paint(true); });
}
if (!setup._tsuOsResizeHooked) {
setup._tsuOsResizeHooked = true;
window.addEventListener('resize', function () { paint(true); });
}
})();
<</script>>
<div class="tsuos-hint">type <a class="tsuos-cmd-link" data-tsuos-cmd="help" data-tsuos-mode="fire">help</a> for the command list, or click any chip below. tab autocompletes. you can drop the slash if you want.</div>
<div class="tsuos-out">
<<if $terminalOutput and $terminalOutput.length gt 0>>
<<print $terminalOutput>>
<<else>>
<<print setup.tsuOsRenderDefault()>>
<</if>>
</div>
<div class="tsuos-prom">
<span class="tsuos-prom-char">><span class="tsuos-prom-slash">/</span></span>
<<textbox "$terminalInput" "" "TerminalProcess">>
</div>
<div class="tsuos-exit">
<<if $ship.upgraded>>
<<link "[Exit Terminal]">><<run setup.playSound('terminal_power_off', { volume: 0.7 })>><<set $terminalOutput to "">><<goto "Cockpit">><</link>>
<<else>>
<<link "[Exit Terminal]">><<run setup.playSound('terminal_close')>><<set $terminalOutput to "">><<goto "Ship">><</link>>
<</if>>
</div>
</div>
<</if>><<set _cmd to setup.termEscape($terminalInput.trim().toLowerCase())>>
<<run setup.tsuOsPushHistory(_cmd)>>
<<set $terminalInput to "">>
<<set _parts to _cmd.split(" ")>>
<<set _base to _parts[0]>>
<<set _arg to "">>
<<if _parts.length gt 1>>
<<set _arg to _parts.slice(1).join(" ")>>
<</if>>
<<set _gfx to true>>
<<if _base neq "/scan" and _base neq "scan">>
<<run setup.stopAmbient('scan')>>
<</if>>
<<if $terminalPending and $terminalPending.kind eq 'recharge'>>
<<set _pend to $terminalPending>>
<<set $terminalPending to null>>
<<if _base eq 'y' or _base eq 'yes'>>
<<set _itm to setup.findRechargeable(_pend.itemId)>>
<<if not _itm>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _base + '</span><br><br>RECHARGE FAILED.<br>No ' + (_pend.def ? _pend.def.name : _pend.itemId) + ' in cargo or storage.'>>
<<else>>
<<set _rr to setup.rechargeItem(_itm.item)>>
<<if _rr.ok>>
<<set _out to '<span class="cmd-echo">> ' + _base + '</span><br><br>RECHARGE COMPLETE.<br>' + setup.getItemDef(_pend.itemId).name + ': ' + _itm.item.charges + '/' + _itm.item.maxCharges + '<br>Fuel: ' + ($ship.fuel + _rr.cost) + ' -> ' + $ship.fuel>>
<<set $terminalOutput to _out>>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _base + '</span><br><br>RECHARGE FAILED.<br>Reason: ' + _rr.reason + '.'>>
<</if>>
<</if>>
<<elseif _base eq 'n' or _base eq 'no'>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _base + '</span><br><br>Cancelled. No fuel spent.'>>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _base + '</span><br><br>Confirmation cancelled. Run /recharge again if you change your mind.'>>
<</if>>
<<elseif $terminalPending and $terminalPending.kind eq 'recNego' and not setup.recPendingLive() and (_base eq '/offer' or _base eq 'offer' or not isNaN(parseInt(_base, 10)))>>
<<set $terminalPending to null>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><br><span class="rec-tag is-dead">// CHANNEL CLOSED</span><br><br>That file is not aboard any more. Whoever was on the other end belongs to whoever holds the paper.'>>
<<elseif $terminalPending and $terminalPending.kind eq 'recNego' and (_base eq '/offer' or _base eq 'offer' or not isNaN(parseInt(_base, 10)))>>
<<set _np to $terminalPending>>
<<if _base eq '/offer' or _base eq 'offer'>><<set _num to parseInt(_arg, 10)>>
<<else>><<set _num to parseInt(_base, 10)>><</if>>
<<if isNaN(_num)>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><br><span class="rec-said">a number. that\'s all i need from you.</span>' + setup.recHaggleControls(_np)>>
<<else>>
<<set _res to setup.recNegoEval(_np, _num)>>
<<set $terminalOutput to setup.recNegoRoundOutput(_np, _res, _num)>>
<<if _res.outcome eq 'deal' or _res.outcome eq 'hangup'>>
<<set $terminalPending to null>>
<<else>>
<<set $terminalPending to _np>>
<</if>>
<</if>>
<<elseif _base eq "/help" or _base eq "help">>
<<if _gfx>>
<<set $terminalOutput to '<span class="cmd-echo">> /help</span><br>' + setup.tsuOsRenderHelp()>>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> /help</span><br><br>AVAILABLE COMMANDS:<br><br><span class="cmd-hl">[ship]</span><br>/scan ........ Scan nearby space<br>/status ...... Ship systems report<br>/manifest .... Cargo + storage inventory<br>/log ......... Career log (warnings, deliveries, days)<br>/quota ....... Quota status<br>/shop ........ Company store<br>/codex ....... Item archive<br>/bestiary .... Creature index<br>/recharge .... Top off flashlight or pulse scanner with fuel<br><br><span class="cmd-hl">[travel]</span><br>/land ........ Travel to a planet<br>/dock ........ Dock at a station<br>/takeoff ..... Lift off into orbit<br>/undock ...... Release from station<br><br><span class="cmd-hl">[bunk]</span><br>/lock ........ Bolt the hatch from inside (skips intruder roll, blocks exit)<br>/unlock ...... Release the hatch bolt<br><br><span class="cmd-hl">[terminal]</span><br>/clear ....... Clear terminal output<br>/exit ........ Exit terminal'>>
<</if>>
<<elseif _base eq "/release" or _base eq "release">>
<<set _echo to '<span class="cmd-echo">> ' + _cmd + '</span><br><br>'>>
<<set _relGate to setup.companionCanRelease()>>
<<set _relC to $companion>>
<<if not _relGate.ok>>
<<set $terminalOutput to _echo + setup.companionReleaseReason(_relGate)>>
<<elseif _arg eq "confirm">>
<<set _relRes to setup.companionRelease()>>
<<if not _relRes.ok>>
<<set $terminalOutput to _echo + _relRes.why>>
<<else>>
<<set _relOut to _echo + '<div class="tsuos-report">'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Contract</span><span class="tsuos-report-value">CLOSED</span></div>'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Name</span><span class="tsuos-report-value">' + _relRes.name + '</span></div>'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Served</span><span class="tsuos-report-value">' + _relRes.days + ' day' + (_relRes.days eq 1 ? '' : 's') + '</span></div>'>>
<<if _relRes.moved gt 0>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Pack</span><span class="tsuos-report-value">' + _relRes.moved + ' item' + (_relRes.moved eq 1 ? '' : 's') + ' to storage</span></div>'>>
<</if>>
<<if _relRes.owed gt 0>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Back pay</span><span class="tsuos-report-value">' + _relRes.paid + ' cr paid' + (_relRes.unpaid gt 0 ? ', ' + _relRes.unpaid + ' written off' : '') + '</span></div>'>>
<</if>>
<<set _relOut += '</div>'>>
<<set $terminalOutput to _relOut>>
<<run setup.showUseToast('<b>' + _relRes.name + '</b> is off your contract. The bunk is empty.', { variant: 'hint', dwell: 3200 })>>
<<run setup.renderRightBar()>>
<</if>>
<<else>>
<<set _relOwed to Math.max(0, Math.round(_relC.owed || 0))>>
<<set _relOut to _echo + '<div class="tsuos-report">'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Name</span><span class="tsuos-report-value">' + _relC.name + '</span></div>'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Served</span><span class="tsuos-report-value">' + _relGate.days + ' day' + (_relGate.days eq 1 ? '' : 's') + '</span></div>'>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Returned to</span><span class="tsuos-report-value">' + (($ship.stationName) || 'this station') + '</span></div>'>>
<<if _relOwed gt 0>>
<<set _relOut += '<div class="tsuos-report-row"><span class="tsuos-report-label">Back pay owed</span><span class="tsuos-report-value">' + _relOwed + ' cr</span></div>'>>
<</if>>
<<set _relOut += '</div><br>Signing them back over ends the contract here. Anything in their pack goes to your storage, their own kit goes with them.<br><br>Run <span class="cmd-hl">/release confirm</span> to file it.'>>
<<set $terminalOutput to _relOut>>
<</if>>
<<elseif _base eq "/contact" or _base eq "contact">>
<<set _echo to '<span class="cmd-echo">> ' + _cmd + '</span><br><br>'>>
<<set _contacts to setup.terminalContacts()>>
<<if _contacts.length eq 0>>
<<set $terminalOutput to _echo + 'No contacts on file.'>>
<<elseif _arg and _arg.length>>
<<set _pick to setup.matchContact(_arg, _contacts)>>
<<if _pick>>
<<set $terminalOutput to _echo + '<span class="rec-dial">Connecting to ' + _pick.name + '</span>'>>
<<run setup.contactDialDelay(_pick.id)>>
<<else>>
<<set $terminalOutput to _echo + 'No contact by that name. Type <span class="cmd-hl">/contact</span> to see who you can reach.'>>
<</if>>
<<elseif _contacts.length eq 1>>
<<set $terminalOutput to _echo + '<span class="rec-dial">Connecting to ' + _contacts[0].name + '</span>'>>
<<run setup.contactDialDelay(_contacts[0].id)>>
<<else>>
<<set $terminalOutput to setup.contactListOutput(_contacts)>>
<</if>>
<<elseif _base eq "/offer" or _base eq "offer">>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><br>No open channel. Run <span class="cmd-hl">/contact</span> first.'>>
<<elseif _base eq "/status" or _base eq "status">>
<<run setup.recomputeCargoValue()>>
<<if _gfx>>
<<set _sFuel to setup.tsuOsBar($ship.fuel, $ship.maxFuel, { kind: 'vital', suffix: 'frac' })>>
<<set _sEnergy to setup.tsuOsBar($player.energy, $player.maxEnergy, { kind: 'vital', suffix: 'frac' })>>
<<set _sHealth to setup.tsuOsBar($player.health, $player.maxHealth, { kind: 'vital', suffix: 'frac' })>>
<<set _sPos to "Drifting in open space">>
<<if $ship.landed>><<set _sPos to "Landed on " + $ship.planetName>>
<<elseif $ship.docked>><<set _sPos to "Docked at " + $ship.stationName>>
<</if>>
<<set _sPower to ($ship.fuel > 0) ? '<span class="tsuos-report-value is-good">ONLINE</span>' : '<span class="tsuos-report-value is-crit">OFFLINE</span>'>>
<<set _sHatch to $ship.hatchLocked ? '<span class="tsuos-report-value is-warn">BOLTED</span>' : '<span class="tsuos-report-value">released</span>'>>
<<set _out to '<span class="cmd-echo">> /status</span>'>>
<<set _out += '<div class="tsuos-report">'>>
<<set _out += '<div class="tsuos-report-title">Ship Systems</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Fuel</span><span class="tsuos-report-value">' + _sFuel + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Power</span>' + _sPower + '</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Position</span><span class="tsuos-report-value">' + _sPos + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Hatch</span>' + _sHatch + '</div>'>>
<<set _out += '<div class="tsuos-report-title">Pilot</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Health</span><span class="tsuos-report-value">' + _sHealth + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Energy</span><span class="tsuos-report-value">' + _sEnergy + '</span></div>'>>
<<set _out += '<div class="tsuos-report-title">Wallet</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Credits</span><span class="tsuos-report-value">' + $player.credits + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Cargo Value</span><span class="tsuos-report-value">' + $ship.cargoValue + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Storage Value</span><span class="tsuos-report-value">' + setup.storageValue() + '</span></div>'>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<else>>
<<set _out to '<span class="cmd-echo">> /status</span><br><br>'>>
<<set _out += 'SHIP SYSTEMS REPORT<br>'>>
<<set _out += '-------------------<br>'>>
<<set _out += 'Fuel: ' + $ship.fuel + '/' + $ship.maxFuel + '<br>'>>
<<set _out += 'Power: ' + ($ship.fuel > 0 ? 'ONLINE' : 'OFFLINE') + '<br>'>>
<<set _out += 'Cargo Value: ' + $ship.cargoValue + ' scrap<br>'>>
<<set _out += 'Storage Value: ' + setup.storageValue() + ' scrap<br>'>>
<<set _out += 'Door: ' + ($ship.doorOpen ? 'OPEN' : 'LOCKED') + '<br>'>>
<<set _out += 'Hatch bolt: ' + ($ship.hatchLocked ? '<span class="cmd-hl">ENGAGED</span>' : 'released') + '<br>'>>
<<set _out += 'Position: '>>
<<if $ship.landed>>
<<set _out += 'Landed on ' + $ship.planetName>>
<<elseif $ship.docked>>
<<set _out += 'Docked at ' + $ship.stationName>>
<<else>>
<<set _out += 'Drifting in open space'>>
<</if>>
<<set $terminalOutput to _out>>
<</if>>
<<elseif _base eq "/manifest" or _base eq "manifest">>
<<run setup.recomputeCargoValue()>>
<<if _gfx>>
<<set _mfMax to setup.getCargoSlots()>>
<<set _mfBar to setup.tsuOsBar($ship.cargo.length, _mfMax, { kind: 'accent', suffix: 'frac' })>>
<<set _out to '<span class="cmd-echo">> /manifest</span>'>>
<<set _out += '<div class="tsuos-report">'>>
<<set _out += '<div class="tsuos-report-title">Cargo Bay</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Capacity</span><span class="tsuos-report-value">' + _mfBar + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Value</span><span class="tsuos-report-value">' + $ship.cargoValue + ' credits</span></div>'>>
<<if $ship.cargo.length eq 0>>
<<set _out += '<div class="tsuos-report-empty">Hold is empty.</div>'>>
<<else>>
<<for _mi, _mit range $ship.cargo>>
<<set _mdef to setup.getItemDef(_mit.id)>>
<<set _mname to (_mdef and _mdef.name) ? _mdef.name : _mit.id>>
<<set _mval to (_mit.value !== undefined) ? _mit.value : ((_mdef and _mdef.baseValue) || 0)>>
<<set _mlock to _mit.locked ? '<span class="tsuos-report-item-locked"><span class="tsuos-lock-ico">' + setup.ICONS.locked + '</span> LOCKED</span>' : ''>>
<<set _out += '<div class="tsuos-report-item"><span class="tsuos-report-item-name">' + _mname + _mlock + '</span><span class="tsuos-report-item-price">' + _mval + ' cr</span></div>'>>
<</for>>
<</if>>
<<set _out += '<div class="tsuos-report-title">Ship Storage</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Items</span><span class="tsuos-report-value">' + $ship.storage.length + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Value</span><span class="tsuos-report-value">' + setup.storageValue() + ' credits</span></div>'>>
<<if $ship.storage.length eq 0>>
<<set _out += '<div class="tsuos-report-empty">Storage bay is empty.</div>'>>
<<else>>
<<for _si, _sit range $ship.storage>>
<<set _sdef to setup.getItemDef(_sit.id)>>
<<set _sname to (_sdef and _sdef.name) ? _sdef.name : _sit.id>>
<<set _sval to (_sit.value !== undefined) ? _sit.value : ((_sdef and _sdef.baseValue) || 0)>>
<<set _out += '<div class="tsuos-report-item"><span class="tsuos-report-item-name">' + _sname + '</span><span class="tsuos-report-item-price">' + _sval + ' cr</span></div>'>>
<</for>>
<</if>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<else>>
<<set _out to '<span class="cmd-echo">> /manifest</span><br><br>'>>
<<set _out += '<div class="codex-root">'>>
<<set _out += '<div class="codex-header">CARGO MANIFEST</div>'>>
<<set _out += '<div class="codex-sub">Cargo: ' + $ship.cargo.length + '/' + setup.getCargoSlots() + ' slots | Value: ' + $ship.cargoValue + ' scrap</div>'>>
<<set _out += '<div class="codex-section">'>>
<<if $ship.cargo.length eq 0>>
<<set _out += '<em>Hold is empty.</em>'>>
<<else>>
<<for _mi, _mit range $ship.cargo>>
<<set _mdef to setup.getItemDef(_mit.id)>>
<<set _mname to (_mdef and _mdef.name) ? _mdef.name : _mit.id>>
<<set _mval to (_mit.value !== undefined) ? _mit.value : ((_mdef and _mdef.baseValue) || 0)>>
<<set _out += '<div class="codex-entry known"><div class="codex-row"><span class="codex-name">' + _mname + '</span><span class="codex-tag found">' + _mval + ' cr</span></div></div>'>>
<</for>>
<</if>>
<<set _out += '</div>'>>
<<set _out += '<div class="codex-header">SHIP STORAGE</div>'>>
<<set _out += '<div class="codex-sub">Storage: ' + $ship.storage.length + ' items | Value: ' + setup.storageValue() + ' scrap</div>'>>
<<set _out += '<div class="codex-section">'>>
<<if $ship.storage.length eq 0>>
<<set _out += '<em>Storage bay is empty.</em>'>>
<<else>>
<<for _si, _sit range $ship.storage>>
<<set _sdef to setup.getItemDef(_sit.id)>>
<<set _sname to (_sdef and _sdef.name) ? _sdef.name : _sit.id>>
<<set _sval to (_sit.value !== undefined) ? _sit.value : ((_sdef and _sdef.baseValue) || 0)>>
<<set _out += '<div class="codex-entry known"><div class="codex-row"><span class="codex-name">' + _sname + '</span><span class="codex-tag found">' + _sval + ' cr</span></div></div>'>>
<</for>>
<</if>>
<<set _out += '</div></div>'>>
<<set $terminalOutput to _out>>
<</if>>
<<elseif _base eq "/scan" or _base eq "scan">>
<<if $known.destinations.indexOf("wetole-7") lt 0>><<run $known.destinations.push("wetole-7")>><</if>>
<<if $known.destinations.indexOf("cumdump-9") lt 0>><<run $known.destinations.push("cumdump-9")>><</if>>
<<run setup.setAmbient('scan', 'Sounds/ambient/sonar.mp3', { volume: 0.35 })>>
<<if _gfx>>
<<set $terminalOutput to '<span class="cmd-echo">> /scan</span><br>' + setup.tsuOsRenderDefault()>>
<<else>>
<<set _statusCls to 'st-drift'>>
<<set _statusTxt to 'SIGNAL: DRIFTING IN VOID'>>
<<if $ship.landed>>
<<set _statusCls to 'st-land'>>
<<set _statusTxt to 'SIGNAL: PLANETSIDE · ' + $ship.planetName.toUpperCase()>>
<<elseif $ship.docked>>
<<set _statusCls to 'st-dock'>>
<<set _statusTxt to 'SIGNAL: DOCKED · ' + $ship.stationName.toUpperCase()>>
<</if>>
<<set _out to '<span class="cmd-echo">> /scan</span><br><br>SCANNING NEARBY SPACE...<br>'>>
<<set _out += '<div class="radar-wrap">'>>
<<set _out += '<div class="radar-status ' + _statusCls + '">' + _statusTxt + '</div>'>>
<<set _out += '<div class="radar">'>>
<<set _out += '<div class="radar-clip">'>>
<<set _out += '<div class="radar-ring r1"></div>'>>
<<set _out += '<div class="radar-ring r2"></div>'>>
<<set _out += '<div class="radar-ring r3"></div>'>>
<<set _out += '<div class="radar-sweep"></div>'>>
<<set _out += '<div class="radar-sweep-line"></div>'>>
<<set _out += '</div>'>>
<<set _legendEntries to []>>
<<for _ki, _kid range $known.destinations>>
<<set _kdef to setup.DESTINATIONS[_kid]>>
<<if _kdef>>
<<set _isHere to ($ship.landed and $ship.planetName eq _kdef.name) or ($ship.docked and $ship.stationName eq _kdef.name)>>
<<set _dotCls to (_kdef.type eq 'station') ? 'radar-station' : 'radar-planet'>>
<<if _kdef.status eq 'wip'>>
<<set _dotCls += ' radar-wip'>>
<</if>>
<<set _labelTail to ''>>
<<if _isHere>>
<<set _labelTail to ''>>
<<elseif _kdef.status eq 'wip'>>
<<set _labelTail to ' — WIP'>>
<<else>>
<<set _labelTail to ' — ' + setup.travelFuelCost(_kdef.id) + ' FUEL'>>
<</if>>
<<set _out += '<div class="radar-dot ' + _dotCls + '" style="top:' + _kdef.radarTop + '%;left:' + _kdef.radarLeft + '%;"><span class="dot-label">' + _kdef.name.toUpperCase() + _labelTail + '</span></div>'>>
<<if _isHere>>
<<set _out += '<div class="radar-dot radar-here" style="top:' + _kdef.radarTop + '%;left:' + _kdef.radarLeft + '%;"></div>'>>
<</if>>
<<set _legendLine to '<span class="legend-dot-' + (_kdef.type eq 'station' ? 'station' : 'planet') + '">●</span> ' + _kdef.name>>
<<if _isHere>>
<<set _legendLine += (_kdef.type eq 'station') ? ' — docked' : ' — landed'>>
<<elseif _kdef.status eq 'wip'>>
<<set _legendLine += ', <em>under construction</em>'>>
<<else>>
<<set _legendLine += ' (' + _kdef.type + ') — ' + setup.travelFuelCost(_kdef.id) + ' fuel'>>
<</if>>
<<run _legendEntries.push(_legendLine)>>
<</if>>
<</for>>
<<set _centerCls to 'radar-center'>>
<<if $ship.landed>><<set _centerCls += ' you-landed'>>
<<elseif $ship.docked>><<set _centerCls += ' you-docked'>>
<</if>>
<<set _out += '<div class="radar-dot ' + _centerCls + '" style="top:50%;left:50%;"></div>'>>
<<set _out += '</div>'>>
<<set _out += '<div class="radar-legend">'>>
<<if $ship.landed>>
<<set _out += '<span class="legend-dot-here">○</span> Your Ship (planetside)<br>'>>
<<elseif $ship.docked>>
<<set _out += '<span class="legend-dot-here">○</span> Your Ship (docked)<br>'>>
<<else>>
<<set _out += '<span class="legend-dot-ship">●</span> Your Ship (center)<br>'>>
<</if>>
<<set _out += _legendEntries.join('<br>')>>
<<set _out += '</div></div>'>>
<<if $ship.landed>>
<<set _out += '<br>Run <span class="cmd-hl">/takeoff</span> first, then <span class="cmd-hl">/dock</span> [name] or <span class="cmd-hl">/land</span> [name].'>>
<<elseif $ship.docked>>
<<set _out += '<br>Run <span class="cmd-hl">/undock</span> first, then <span class="cmd-hl">/land</span> [name].'>>
<<else>>
<<set _out += '<br>Use <span class="cmd-hl">/land</span> [name] to travel to a planet.<br>Use <span class="cmd-hl">/dock</span> [name] to dock at a station.'>>
<</if>>
<<set $terminalOutput to _out>>
<</if>>
<<elseif _base eq "/quota" or _base eq "quota">>
<<if _gfx>>
<<set _out to '<span class="cmd-echo">> /quota</span><div class="tsuos-report">'>>
<<if not $quota.started>>
<<set _out += '<div class="tsuos-report-title">Quota</div>'>>
<<set _out += '<div class="tsuos-report-sub">Tracking begins after your first delivery.</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Target</span><span class="tsuos-report-value">' + $quota.target + ' scrap</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Cycle</span><span class="tsuos-report-value">every ' + $quota.cycle + ' days</span></div>'>>
<<else>>
<<set _qBar to setup.tsuOsBar($quota.delivered, $quota.target, { kind: 'warn', suffix: 'frac' })>>
<<set _dayBar to setup.tsuOsBar($quota.day, $quota.cycle, { kind: 'accent', suffix: 'frac' })>>
<<set _remaining to Math.max(0, $quota.target - $quota.delivered)>>
<<set _out += '<div class="tsuos-report-title">Quota Cycle</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Cycle Day</span><span class="tsuos-report-value">' + _dayBar + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Delivered</span><span class="tsuos-report-value">' + _qBar + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Remaining</span><span class="tsuos-report-value">' + _remaining + ' scrap</span></div>'>>
<</if>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<else>>
<<set _out to '<span class="cmd-echo">> /quota</span><br><br>'>>
<<if not $quota.started>>
<<set _out += 'QUOTA NOT ACTIVE.<br>Quota tracking begins after your first delivery.<br>Target per cycle: ' + $quota.target + ' scrap every ' + $quota.cycle + ' days.'>>
<<else>>
<<set _out += 'QUOTA STATUS<br>'>>
<<set _out += '-----------<br>'>>
<<set _out += 'Cycle Day: ' + $quota.day + '/' + $quota.cycle + '<br>'>>
<<set _out += 'Required: ' + $quota.target + ' scrap<br>'>>
<<set _out += 'Delivered: ' + $quota.delivered + ' scrap<br>'>>
<<set _out += 'Remaining: ' + Math.max(0, $quota.target - $quota.delivered) + ' scrap'>>
<</if>>
<<set $terminalOutput to _out>>
<</if>>
<<elseif _base eq "/log" or _base eq "log">>
<<set _out to '<span class="cmd-echo">> /log</span><div class="tsuos-report">'>>
<<set _out += '<div class="tsuos-report-title">Personnel Log</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Designation</span><span class="tsuos-report-value">' + $player.name + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Rank</span><span class="tsuos-report-value">' + setup.getRankName($player.rank) + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Days Survived</span><span class="tsuos-report-value">' + $time.day + '</span></div>'>>
<<set _out += '<div class="tsuos-report-title">Quota Standing</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Cycle Day</span><span class="tsuos-report-value">' + $quota.day + '/' + $quota.cycle + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Delivered</span><span class="tsuos-report-value">' + $quota.delivered + ' / ' + $quota.target + '</span></div>'>>
<<set _warnCls to ($player.warnings gte 1) ? 'tsuos-report-value is-crit' : 'tsuos-report-value'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Warnings</span><span class="' + _warnCls + '">' + Math.min(2, $player.warnings || 0) + '/2</span></div>'>>
<<if $player.warnings gte 1>>
<<set _out += '<div class="tsuos-report-empty" style="color:#f56b9e;font-style:normal;">NOTICE: One more failed quota triggers ejection.</div>'>>
<</if>>
<<run setup.ensureProgress()>>
<<set _out += '<div class="tsuos-report-title">Company Ledger</div>'>>
<<set _debtCls to ($progress.debt gt 0) ? 'tsuos-report-value is-crit' : 'tsuos-report-value'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Debt</span><span class="' + _debtCls + '">' + (setup.debtDisplay() + ' cr') + '</span></div>'>>
<<set _expCap to setup.progressExpCap()>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Record</span><span class="tsuos-report-value">' + (setup.progressExpMaxed() ? 'MAX' : $progress.exp.toLocaleString('en-US') + ' / ' + _expCap.toLocaleString('en-US')) + '</span></div>'>>
<<if $progress.expMult gt 1>>
<<set _out += '<div class="tsuos-report-sub">Production bonus active: sales earn +' + Math.round(($progress.expMult - 1) * 100) + '% exp.</div>'>>
<</if>>
<<set _out += '<div class="tsuos-report-title">Vitals</div>'>>
<<set _hpBar to setup.tsuOsBar($player.health, $player.maxHealth, { kind: 'vital', suffix: 'frac' })>>
<<set _enBar to setup.tsuOsBar($player.energy, $player.maxEnergy, { kind: 'vital', suffix: 'frac' })>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Health</span><span class="tsuos-report-value">' + _hpBar + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Energy</span><span class="tsuos-report-value">' + _enBar + '</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Credits</span><span class="tsuos-report-value">' + $player.credits + ' cr</span></div>'>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<elseif _base eq "/shop" or _base eq "shop">>
<<set _out to '<span class="cmd-echo">> /shop</span><div class="tsuos-report">'>>
<<set _out += '<div class="tsuos-report-title">Company Store</div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Credits</span><span class="tsuos-report-value">' + $player.credits + ' cr</span></div>'>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Rank</span><span class="tsuos-report-value">' + setup.getRankName($player.rank) + '</span></div>'>>
<<if not $ship.docked>>
<<set _out += '<div class="tsuos-report-sub">Browse-only. Dock at a station to purchase.</div>'>>
<</if>>
<<set _out += '<div class="tsuos-report-title">Listings</div>'>>
<<for _sI, _sid range setup.SHOP_IDS>>
<<set _sdef to setup.ITEMS[_sid]>>
<<set _out += '<div class="tsuos-report-item"><span class="tsuos-report-item-name">' + _sdef.name + '</span><span class="tsuos-report-item-price">' + _sdef.shopPrice + ' cr</span></div>'>>
<</for>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<elseif _base eq "/codex" or _base eq "codex">>
<<set $terminalOutput to setup.renderCodex()>>
<<elseif _base eq "/bestiary" or _base eq "bestiary">>
<<set $terminalOutput to setup.renderBestiary()>>
<<elseif _base eq "/quests" or _base eq "quests" or _base eq "/journal" or _base eq "journal">>
<<set $terminalOutput to '<span class="cmd-echo">> /quests</span>' + setup.tsuOsRenderQuests()>>
<<elseif _base eq "/recharge" or _base eq "recharge">>
<<if _arg.length eq 0>>
<<if _gfx>>
<<set _out to '<span class="cmd-echo">> /recharge</span><div class="tsuos-report">'>>
<<set _out += '<div class="tsuos-report-title">Recharge Bay</div>'>>
<<set _fuelBar to setup.tsuOsBar($ship.fuel, $ship.maxFuel, { kind: 'vital', suffix: 'frac' })>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">Fuel Avail</span><span class="tsuos-report-value">' + _fuelBar + '</span></div>'>>
<<set _hasAny to false>>
<<set _ids to Object.keys(setup.RECHARGE_COSTS)>>
<<for _ri, _rid range _ids>>
<<set _found to setup.findRechargeable(_rid)>>
<<if _found>>
<<set _rdef to setup.getItemDef(_rid)>>
<<set _rcost to setup.getRechargeCost(_rid)>>
<<set _rmax to _found.item.maxCharges or _rdef.charges>>
<<set _chgBar to setup.tsuOsBar(_found.item.charges, _rmax, { kind: 'accent', suffix: 'frac', width: 12 })>>
<<if _found.item.charges gte _rmax>>
<<set _rowVal to _chgBar + ' <span class="tsuos-report-item-locked">FULL</span>'>>
<<else>>
<<set _rowVal to _chgBar + ' <a class="tsuos-cmd-link" data-tsuos-cmd="recharge" data-tsuos-mode="fire" data-tsuos-arg-value="' + _rid + '">[recharge ' + _rcost + ' fuel]</a>'>>
<</if>>
<<set _out += '<div class="tsuos-report-row"><span class="tsuos-report-label">' + _rdef.name + '</span><span class="tsuos-report-value">' + _rowVal + '</span></div>'>>
<<set _hasAny to true>>
<</if>>
<</for>>
<<if not _hasAny>>
<<set _out += '<div class="tsuos-report-empty">No rechargeable equipment in cargo or storage.</div>'>>
<</if>>
<<set _out += '</div>'>>
<<set $terminalOutput to _out>>
<<else>>
<<set _out to '<span class="cmd-echo">> /recharge</span><br><br>RECHARGE BAY<br>------------<br>'>>
<<set _hasAny to false>>
<<set _ids to Object.keys(setup.RECHARGE_COSTS)>>
<<for _ri, _rid range _ids>>
<<set _found to setup.findRechargeable(_rid)>>
<<if _found>>
<<set _rdef to setup.getItemDef(_rid)>>
<<set _rcost to setup.getRechargeCost(_rid)>>
<<set _rmax to _found.item.maxCharges or _rdef.charges>>
<<if _found.item.charges gte _rmax>>
<<set _out += _rdef.name + ': <span class="cmd-hl">FULL</span> (' + _found.item.charges + '/' + _rmax + ')<br>'>>
<<else>>
<<set _out += _rdef.name + ': ' + _found.item.charges + '/' + _rmax + ' - costs ' + _rcost + ' fuel<br>'>>
<</if>>
<<set _hasAny to true>>
<</if>>
<</for>>
<<if not _hasAny>>
<<set _out += '<em>No rechargeable equipment in cargo or storage.</em><br>'>>
<<else>>
<<set _out += '<br>Run <span class="cmd-hl">/recharge [name]</span> to top one off.'>>
<</if>>
<<set _out += '<br>Fuel available: ' + $ship.fuel + '/' + $ship.maxFuel>>
<<set $terminalOutput to _out>>
<</if>>
<<else>>
<<set _rcArg to _arg.toLowerCase()>>
<<set _rcTargetId to null>>
<<for _ri, _rid range Object.keys(setup.RECHARGE_COSTS)>>
<<if _rcArg.indexOf(_rid.replace('_', ' ')) gte 0 or _rcArg.indexOf(_rid.replace('_', '')) gte 0 or _rid.indexOf(_rcArg) gte 0 or _rcArg.indexOf(_rid) gte 0>>
<<set _rcTargetId to _rid>>
<<break>>
<</if>>
<</for>>
<<if not _rcTargetId>>
<<set $terminalOutput to '<span class="cmd-echo">> /recharge ' + _arg + '</span><br><br>UNKNOWN EQUIPMENT.<br>Recognized: flashlight, pulse scanner.'>>
<<else>>
<<set _rcFound to setup.findRechargeable(_rcTargetId)>>
<<set _rcDef to setup.getItemDef(_rcTargetId)>>
<<set _rcCost to setup.getRechargeCost(_rcTargetId)>>
<<if not _rcFound>>
<<set $terminalOutput to '<span class="cmd-echo">> /recharge ' + _arg + '</span><br><br>NOT IN INVENTORY.<br>No ' + _rcDef.name + ' in cargo or storage.'>>
<<elseif _rcFound.item.charges gte (_rcFound.item.maxCharges or _rcDef.charges)>>
<<set $terminalOutput to '<span class="cmd-echo">> /recharge ' + _arg + '</span><br><br>ALREADY FULL.<br>' + _rcDef.name + ' is at ' + _rcFound.item.charges + '/' + (_rcFound.item.maxCharges or _rcDef.charges) + '. Nothing to top off.'>>
<<elseif $ship.fuel lt _rcCost>>
<<set $terminalOutput to '<span class="cmd-echo">> /recharge ' + _arg + '</span><br><br>INSUFFICIENT FUEL.<br>Required: ' + _rcCost + '<br>Current: ' + $ship.fuel + '<br>Dock at a station first.'>>
<<else>>
<<set $terminalPending to { kind: 'recharge', itemId: _rcTargetId }>>
<<set _rcMaxC to _rcFound.item.maxCharges or _rcDef.charges>>
<<set _out to '<span class="cmd-echo">> /recharge ' + _arg + '</span><br><br>RECHARGE: ' + _rcDef.name + '<br>'>>
<<set _out += 'Current: ' + _rcFound.item.charges + '/' + _rcMaxC + '<br>'>>
<<set _out += 'Cost: ' + _rcCost + ' fuel<br>'>>
<<set _out += 'Fuel after: ' + ($ship.fuel - _rcCost) + '/' + $ship.maxFuel + '<br><br>'>>
<<set _out += 'Confirm? <span class="cmd-hl">y / n</span>'>>
<<set $terminalOutput to _out>>
<</if>>
<</if>>
<</if>>
<<elseif _base eq "/land" or _base eq "land">>
<<if _arg.length eq 0>>
<<set $terminalOutput to '<span class="cmd-echo">> /land</span><br><br>Usage: /land [planet name]<br>Run /scan to see destinations.'>>
<<else>>
<<set _landDef to setup.findDestination(_arg)>>
<<set _landCost to (_landDef ? setup.travelFuelCost(_landDef.id) : 0)>>
<<set _landMins to (_landDef ? setup.travelTimeMinutes(_landDef.id) : 0)>>
<<if not _landDef or _landDef.type eq 'station' or $known.destinations.indexOf(_landDef.id) lt 0>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>UNKNOWN DESTINATION.<br>No scan data for this name. Run /scan first.'>>
<<elseif $ship.docked>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>ERROR: Currently docked at ' + $ship.stationName + '.<br>Run /undock first to release clamps.'>>
<<elseif $ship.landed>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>ERROR: Already landed on ' + $ship.planetName + '.<br>Run /takeoff first to return to orbit.'>>
<<elseif _landDef.status eq 'wip'>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>CONTRACT ON FILE: ' + _landDef.name.toUpperCase() + '<br><br>Surface mapping is not yet available for this destination. The contract is in your file but landing approval is pending. Check back in the next build.<br><br><em>(Work in progress.)</em>'>>
<<elseif $ship.fuel lt _landCost>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>INSUFFICIENT FUEL.<br>Required: ' + _landCost + '<br>Current: ' + $ship.fuel + '<br><br>Dock at a station to refuel.'>>
<<elseif _landDef.id eq "labrotoria-69">>
<<run setup.burnFuel(_landCost)>>
<<run setup.playOneShotAmbient('Sounds/ambient/ship_landing.mp3', { volume: 0.55 })>>
<<set $ship.landed to true>>
<<set $ship.docked to false>>
<<set $ship.planetName to _landDef.name>>
<<set $ship.locId to _landDef.id>>
<<set $ship.doorOpen to true>>
<<if $time.active>><<run setup.passTime(_landMins)>><</if>>
<<set $time.active to true>>
<<set $planet to {
name: _landDef.name,
id: _landDef.id,
isCity: true,
location: "plaza"
}>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>INITIATING LANDING SEQUENCE...<br><br>Destination: ' + _landDef.name + '<br>Fuel cost: ' + _landCost + '<br>Fuel remaining: ' + $ship.fuel + '<br><br>LANDED at the civilian docking pad. No surface map plotted for this one, it\'s a paid colony and the company doesn\'t run scrap contracts here. Exit terminal to step out.'>>
<<elseif _landDef.id eq "sphinxter-42">>
<<run setup.burnFuel(_landCost)>>
<<run setup.playOneShotAmbient('Sounds/ambient/ship_landing.mp3', { volume: 0.55 })>>
<<set $ship.landed to true>>
<<set $ship.docked to false>>
<<set $ship.planetName to _landDef.name>>
<<set $ship.locId to _landDef.id>>
<<set $ship.doorOpen to true>>
<<if $time.active>><<run setup.passTime(_landMins)>><</if>>
<<set $time.active to true>>
<<set $player.hydration to 100>>
<<set $planet to {
name: _landDef.name,
id: "sphinxter-42",
biome: "sand",
outdoor: setup.generateSphinxterOutdoor(),
indoor: null,
location: "outdoor"
}>>
<<set $planet.weather to "dust">>
<<set $planet.weatherAnnounced to false>>
<<run setup.spawnDesertSnakes($planet)>>
<<run setup.spawnBreedingMount($planet)>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>INITIATING LANDING SEQUENCE...<br><br>Destination: ' + _landDef.name + '<br>Fuel cost: ' + _landCost + '<br>Fuel remaining: ' + $ship.fuel + '<br><br>LANDED on open hardpan, dunes in every direction and the city walls a long walk out. Exit terminal to step out.'>>
<<elseif _landDef.id eq "lubea-21">>
<<run setup.burnFuel(_landCost)>>
<<run setup.playOneShotAmbient('Sounds/ambient/ship_landing.mp3', { volume: 0.55 })>>
<<set $ship.landed to true>>
<<set $ship.docked to false>>
<<set $ship.planetName to _landDef.name>>
<<set $ship.locId to _landDef.id>>
<<set $ship.doorOpen to true>>
<<if $time.active>><<run setup.passTime(_landMins)>><</if>>
<<set $time.active to true>>
<<set $planet to {
name: _landDef.name,
id: "lubea-21",
biome: "lubea",
outdoor: setup.generateLubeaMap(),
indoor: null,
location: "outdoor",
peaceful: true
}>>
<<run setup.spawnBreedingMount($planet)>>
<<run setup.spawnWildHorse($planet)>>
<<set $planet.weather to setup.rollLubeaWeather()>>
<<set $planet.weatherAnnounced to ($planet.weather eq "clear")>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>INITIATING LANDING SEQUENCE...<br><br>Destination: ' + _landDef.name + '<br>Fuel cost: ' + _landCost + '<br>Fuel remaining: ' + $ship.fuel + '<br><br>LANDED on a green hillside, sea glittering off to one side and a barn roof in the distance. Air smells clean. Exit terminal to step out.'>>
<<else>>
<<run setup.burnFuel(_landCost)>>
<<run setup.playOneShotAmbient('Sounds/ambient/ship_landing.mp3', { volume: 0.55 })>>
<<set $ship.landed to true>>
<<set $ship.docked to false>>
<<set $ship.planetName to _landDef.name>>
<<set $ship.locId to _landDef.id>>
<<set $ship.doorOpen to true>>
<<if $time.active>><<run setup.passTime(_landMins)>><</if>>
<<set $time.active to true>>
<<set _facFloors to setup.generateFacilityFloors()>>
<<set $planet to {
name: _landDef.name,
outdoor: setup.generateOutdoorMap(),
indoor: _facFloors.floors[0],
floors: _facFloors.floors,
floorNames: _facFloors.names,
hatchFloorIndex: _facFloors.hatchFloor,
floorIndex: 0,
location: "outdoor"
}>>
<<run setup.spawnTentacles($planet)>>
<<run setup.spawnMinotaur($planet)>>
<<run setup.spawnOni($planet)>>
<<run setup.spawnWarden($planet)>>
<<run setup.spawnFacilitySlimes($planet)>>
<<run setup.spawnSurfaceSlimes($planet)>>
<<run setup.designateCoreSeeker($planet)>>
<<run setup.spawnSlaveShip($planet)>>
<<run setup.spawnAltar($planet)>>
<<run setup.spawnHangTraps($planet)>>
<<run setup.guaranteeBoombox($planet)>>
<<run setup.spawnBreedingMount($planet)>>
<<run setup.maybeSpawnSurfaceWeapon($planet)>>
<<set $planet.weather to setup.rollWeather()>>
<<set $planet.weatherAnnounced to false>>
<<run setup.applyWeatherToMaps($planet)>>
<<run setup.applyHullScan($planet)>>
<<set $terminalOutput to '<span class="cmd-echo">> /land ' + _arg + '</span><br><br>INITIATING LANDING SEQUENCE...<br><br>Destination: ' + _landDef.name + '<br>Fuel cost: ' + _landCost + '<br>Fuel remaining: ' + $ship.fuel + '<br><br>LANDED with the door unlocked and the surface map plotted from low-orbit scan.<br><br>Exit terminal to access the hatch.'>>
<</if>>
<</if>>
<<elseif _base eq "/dock" or _base eq "dock">>
<<if _arg.length eq 0>>
<<set $terminalOutput to '<span class="cmd-echo">> /dock</span><br><br>Usage: /dock [station name]<br>Run /scan to see destinations.'>>
<<else>>
<<set _dockDef to setup.findDestination(_arg)>>
<<set _dockCost to (_dockDef ? setup.travelFuelCost(_dockDef.id) : 0)>>
<<set _dockMins to (_dockDef ? setup.travelTimeMinutes(_dockDef.id) : 0)>>
<<if not _dockDef or _dockDef.type neq 'station' or $known.destinations.indexOf(_dockDef.id) lt 0>>
<<set $terminalOutput to '<span class="cmd-echo">> /dock ' + _arg + '</span><br><br>UNKNOWN STATION.<br>No scan data for this name. Run /scan first.'>>
<<elseif $ship.landed>>
<<set $terminalOutput to '<span class="cmd-echo">> /dock ' + _arg + '</span><br><br>ERROR: Landed on ' + $ship.planetName + '.<br>Run /takeoff first to return to orbit.'>>
<<elseif $ship.fuel lt _dockCost>>
<<set $terminalOutput to '<span class="cmd-echo">> /dock ' + _arg + '</span><br><br>INSUFFICIENT FUEL.<br>Required: ' + _dockCost + '<br>Current: ' + $ship.fuel>>
<<else>>
<<run setup.burnFuel(_dockCost)>>
<<set _wasDocked to $ship.docked>>
<<if _wasDocked>><<set $ship.doorOpen to false>><<run setup.clearLocationAmbient()>><</if>>
<<set $ship.docked to true>>
<<set $ship.landed to false>>
<<set $ship.doorOpen to true>>
<<set $ship.stationName to _dockDef.name>>
<<set $ship.locId to _dockDef.id>>
<<run setup.stationArrive(_dockDef.id)>>
<<if $time.active>><<run setup.passTime(_dockMins)>><</if>>
<<run setup.leavePlanetCleanup({ reclaimAltar: true })>>
<<set $planet to null>>
<<set $mia.giftedThisVisit to null>>
<<set _cshop to setup.companionShopTrip()>>
<<if _cshop>>
<<run setup.showUseToast($companion.name + ' wandered off down the concourse and came back with a <b>' + _cshop.name + '</b>. Paid for it out of their own cut, apparently.', { variant: 'hint', dwell: 5200 })>>
<</if>>
<<set $terminalOutput to '<span class="cmd-echo">> /dock ' + _arg + '</span><br><br>DOCKING...<br><br>' + (_wasDocked ? 'Clamps released, course laid in.<br><br>' : '') + 'Station: ' + _dockDef.name + ' Refueling<br>Fuel cost: ' + _dockCost + '<br>Fuel remaining: ' + $ship.fuel + '<br><br>DOCKED with the hatch unlocked, exit terminal to enter the station.'>>
<</if>>
<</if>>
<<elseif _base eq "/takeoff" or _base eq "takeoff">>
<<if not $ship.landed>>
<<set $terminalOutput to '<span class="cmd-echo">> /takeoff</span><br><br>ERROR: Not landed.<br>Takeoff only applies when ship is planetside.'>>
<<else>>
<<set _tpn to $ship.planetName>>
<<if $companion and not $companion.aboard>>
<<set $terminalOutput to '<span class="cmd-echo">> /takeoff</span><br><br>ERROR: Crew still planetside.<br>' + $companion.name + ' is not aboard. The lift interlock will not release with a registered body outside the hull.<br><br>Go get ' + (setup.companionGender($companion) eq "male" ? "him" : "her") + ', or wait at the bunk.'>>
<<else>>
<<set _altBack to setup.leavePlanetCleanup({ reclaimAltar: true }).reclaimed>>
<<if _altBack.length>><<run setup.showUseToast('You emptied the shrine stone on the way out: <b>' + _altBack.join('</b>, <b>') + '</b>.', { variant: 'hint', dwell: 4200 })>><</if>>
<<set $ship.landed to false>>
<<set $ship.doorOpen to false>>
<<set $planet to null>>
<<set $slaveShip to null>>
<<set $facilityDark to false>>
<<set $coreOutBySlime to false>>
<<set $coreOutBy to null>>
<<set $pendingCoreOutDialog to false>>
<<set $slimed to { active: false, roomsCarried: 0, startMin: 0, rooted: false, term: false, sealedAt: 0, risen: false, part: null, absorbAt: null }>>
<<run setup.clearLocationAmbient()>>
<<set $terminalOutput to '<span class="cmd-echo">> /takeoff</span><br><br>LIFTOFF SEQUENCE INITIATED... the hatch seals and the thrusters fire as you push up out of atmosphere away from ' + _tpn + '.<br><br>Position: DRIFTING<br><br>Run /scan for destinations, then /land or /dock.'>>
<</if>>
<</if>>
<<elseif _base eq "/undock" or _base eq "undock">>
<<if not $ship.docked>>
<<set $terminalOutput to '<span class="cmd-echo">> /undock</span><br><br>ERROR: Not docked.'>>
<<else>>
<<set _tsn to $ship.stationName>>
<<set $ship.docked to false>>
<<set $ship.doorOpen to false>>
<<run setup.clearLocationAmbient()>>
<<set $terminalOutput to '<span class="cmd-echo">> /undock</span><br><br>CLAMPS RELEASED... the hatch seals and the ship drifts away from ' + _tsn + ' under its own momentum.<br><br>Position: DRIFTING<br><br>Run /scan for destinations, then /land or /dock.'>>
<</if>>
<<elseif _base eq "/lock" or _base eq "lock">>
<<if not $ship.landed>>
<<set $terminalOutput to '<span class="cmd-echo">> /lock</span><br><br>HATCH BOLT inert.<br>The bolt only engages when the ship is planetside. In orbit the hatch is already sealed by the flight system, and at a station the company keeps the seal under their control, not yours.'>>
<<elseif $ship.hatchLocked>>
<<set $terminalOutput to '<span class="cmd-echo">> /lock</span><br><br>Hatch is already bolted. Run /unlock to release.'>>
<<else>>
<<set $ship.hatchLocked to true>>
<<run setup.playSound('door_close', { volume: 0.6 })>>
<<set $terminalOutput to '<span class="cmd-echo">> /lock</span><br><br>HATCH BOLT ENGAGED.<br>The bolt drops with a flat metallic clack and the indicator on the panel goes red. Nothing on the outside is opening that door now, and neither are you until you /unlock it.<br><br>Sleeping with the bolt down skips the intruder roll. Exiting the ship requires releasing it first.'>>
<</if>>
<<elseif _base eq "/unlock" or _base eq "unlock">>
<<if not $ship.hatchLocked>>
<<set $terminalOutput to '<span class="cmd-echo">> /unlock</span><br><br>Hatch bolt is already released.'>>
<<else>>
<<set $ship.hatchLocked to false>>
<<run setup.playSound('hatch_open', { volume: 0.4 })>>
<<set $terminalOutput to '<span class="cmd-echo">> /unlock</span><br><br>HATCH BOLT RELEASED.<br>The indicator clicks back over to green and the door is yours again.'>>
<</if>>
<<elseif _base eq "/clear" or _base eq "clear" or _base eq "/back" or _base eq "back">>
<<if _gfx>>
<<set $terminalOutput to "">>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _base + '</span><br><br>Output cleared. Terminal ready.'>>
<</if>>
<<elseif _base eq "/exit" or _base eq "exit">>
<<set $terminalOutput to "">>
<<set _exitTerminal to true>>
<<elseif _cmd.length eq 0>>
<<set $terminalOutput to "">>
<<else>>
<<if _gfx>>
<<set _typoGuess to setup.tsuOsDidYouMean(_base)>>
<<if _typoGuess>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><div class="tsuos-dym">Unknown command. Did you mean <a class="tsuos-dym-suggest" data-tsuos-cmd="' + _typoGuess + '" data-tsuos-mode="fire">/' + _typoGuess + '</a>?</div>'>>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><br>ERROR: Unknown command.<br>Click <a class="tsuos-dym-suggest" data-tsuos-cmd="help" data-tsuos-mode="fire">/help</a> or type a command name.'>>
<</if>>
<<else>>
<<set $terminalOutput to '<span class="cmd-echo">> ' + _cmd + '</span><br><br>ERROR: Unknown command.<br>Type /help for available commands.'>>
<</if>>
<</if>>
<<if _gfx and $terminalOutput and $terminalOutput.indexOf("tsuos-cmd-link") lt 0 and $terminalOutput.indexOf("tsuos-radar") lt 0 and $terminalOutput.indexOf("tsuos-help-root") lt 0>>
<<set $terminalOutput to setup.tsuOsLinkify($terminalOutput)>>
<<set $terminalOutput to $terminalOutput + setup.tsuOsBackChip()>>
<</if>>
<<if _exitTerminal>>
<<if $ship.upgraded>>
<<run setup.playSound('terminal_power_off', { volume: 0.7 })>>
<<goto "Cockpit">>
<<else>>
<<run setup.playSound('terminal_close')>>
<<goto "Ship">>
<</if>>
<<else>><<goto "Terminal">><</if>><div class="handbook">
<div class="handbook-title">EMPLOYEE HANDBOOK</div>
<div class="handbook-entries">
<div class="handbook-entry">
<<link "Entry 1: Welcome to Bimbo Company">><<goto "HandbookWelcome">><</link>>
</div>
<div class="handbook-entry">
<<link "Entry 2: Ship Operations">><<goto "HandbookShip">><</link>>
</div>
<div class="handbook-entry">
<<link "Entry 3: The Quota">><<goto "HandbookQuota">><</link>>
</div>
<div class="handbook-entry">
<<link "Entry 4: Special Items">><<goto "HandbookItems">><</link>>
</div>
<div class="handbook-entry">
<<link "Entry 5: Creatures">><<goto "HandbookCreatures">><</link>>
</div>
<div class="handbook-entry">
<<link "Entry 6: Suit Controls">><<goto "HandbookControls">><</link>>
</div>
</div>
<div class="handbook-back">
<<link "Put it down">><<goto "Ship">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 1: WELCOME</div>
<div class="handbook-body">
Congratulations on your assignment to the Property Recovery Division.
Bimbo Company thanks you for your service, which is not optional.
You are a Low-Class Slave, and your designation is printed on the first page of your file, on your suit, and on the side of your ship. You are not an employee and you have no rights. The job is to land on planets, recover valuables, and deliver them.
Your value to this company is measured in what you carry.
Your personal wellbeing is your own concern, and your productivity is ours.
<em>"You are male, you are disposable, and you are worth what you carry and nothing else."</em>
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 2: SHIP OPERATIONS</div>
<div class="handbook-body">
<h3>The Door</h3>
The door is sealed during flight and unlocks when the ship is landed on solid ground or docked at a station. Opening the hatch in open space triggers decompression that kills you, and the ship gets recovered and reassigned to whoever fills your slot next. There is no rescue protocol for your rank.
<h3>Fuel and Power</h3>
The ship runs on fuel, and without it you lose life support, the terminal, and the lights, in that order, and you suffocate alone in the dark.
Fuel drains during travel, and the terminal and life support draw power passively even when you are sitting still. Keep moving.
To refuel, dock at a Refueling Station that takes cargo as payment at the rates they set.
<h3>The Terminal</h3>
The terminal handles navigation, scanning, and ship diagnostics, and you can pull up the command list at any time by typing /help. The terminal is the most expensive thing on this ship, so treat it accordingly.
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 3: THE QUOTA</div>
<div class="handbook-body">
Every three days you owe the company a delivery, brought back through a Refueling Station that takes its cut in fuel before the rest of the haul goes upstairs.
Miss it once, you get a warning on file and a 5,000 credit non-performance fee lands on your debt. Miss it twice, the airlock opens on you mid-drift and the ship flies itself back to be reassigned to whoever fills your slot next, and you wait around in vacuum for your oxygen to run out. The records office notes this takes longer than is strictly necessary.
Meet it and the bar goes up next cycle. The company calls this "growth."
Your current target is printed on the terminal under <<print "/quota">>. Your debt is printed on your tag. You were issued to yourself at 10,000 credits, and that number has only ever gone one direction. The company doesn't run a payment window and it has never needed one.
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 4: SPECIAL ITEMS</div>
<div class="handbook-body">
Some of what you bring home off these planets is alive, or alive enough that the company has filed it under "reactive." Touch one or eat one and your body starts changing in ways the company has put in writing: partial or complete sex changes, runaway growth in places you did not volunteer for, and modifications the internal memos describe as "cosmetically catastrophic."
The company does not care what those things do to you when you use them on yourself. It does care, a lot, if you use them on someone whose body it values. Pull that trick on a company agent, a station worker, or allied personnel and your name goes on the Most Wanted registry. Space Patrol comes for you after that, with extraction methods worse than anything in the reactive catalog.
Stealing from stations or harassing personnel gets you the same trip. The "if they catch you" clause is the only mercy this system offers.
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 5: CREATURES</div>
<div class="handbook-body">
Anything you survive long enough to identify gets logged in your codex, and you can pull the catalog up through the terminal under /codex.
What the company already knows is out there and wants you to be ready for:
<h3>Skin Shifters</h3>
You will meet plenty of these and you will not know them from anyone else, because they copy whatever appearance suits them. The one walking next to you could look like another slave or a station worker or your companion. Ask questions only the real person you are looking at would know the answer to, and assume the worst when the shifter knows them too.
<h3>Loot Hoarders</h3>
Territorial creatures that sit on piles of valuables and let you walk away with whatever you take, as long as you are outside their reach when you take it. Step inside that reach and they go hostile. More low-class slaves have died to this species than to anything else on file.
<h3>Gender Benders</h3>
They reshape your body to their preference and they do not ask first. If one catches you it will sexually assault you in some form, and the only smart move is to lie still and let it happen. Fighting back makes them more violent, and what they leave you with afterwards is worse if you have made them work for it.
<h3>Bees (subtype: Gender Bender)</h3>
Outdoor only. The hives are worth real credits at the station if you get one home in one piece, but you have about five seconds between grabbing the comb and the swarm being on you, so plan the route before you reach. Four rooms of distance shakes them off, and reaching your ship or a facility door cancels the chase, but the fleeing costs you energy you will not get back this run.
If they catch you the big one stings, and where it stings is going to determine what it does to your body. The sting is never fatal and never clean either, and they leave a bottle of nectar behind every time, which the station pays for without asking what it is.
The company does not care what you look like when you get back, just bring the valuables.
<br><br>
<em>This list is not comprehensive. Report any new species through the terminal, assuming you survive the encounter.</em>
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><div class="handbook">
<div class="handbook-title">ENTRY 6: SUIT CONTROLS</div>
<div class="handbook-body">
Your suit's nervous system reads the bunk's basic input panel and the company has standardized the input layout, since training a Low-Class Slave on anything custom is not considered a cost-effective use of resources.
<h3>Walking the Surface</h3>
On the planet surface or inside a facility, you can step one room at a time using the four cardinal exits. The exit panel on the right hand side will list the options if you forget. The suit also accepts directional input from the input panel:
<table class="handbook-keys">
<tr><th>Action</th><th>Keys</th></tr>
<tr><td>Step north</td><td>W <em>or</em> ↑</td></tr>
<tr><td>Step south</td><td>S <em>or</em> ↓</td></tr>
<tr><td>Step east</td><td>D <em>or</em> →</td></tr>
<tr><td>Step west</td><td>A <em>or</em> ←</td></tr>
</table>
Single key presses move one room at a time. The suit won't walk you into a wall, and it won't nag you for trying.
For longer walks, click any visited cell on the minimap and the suit will route you there automatically, stopping if it sees something that wants to eat you.
<h3>Suit Hotkeys</h3>
The same panel runs the rest of your kit so you are not digging through the cargo grid every time something goes wrong. None of these fire while you are typing, mid-encounter, or already in something's grip, so do not expect a key to save you once a thing has hold of you.
<table class="handbook-keys">
<tr><th>Action</th><th>Keys</th></tr>
<tr><td>Take an option on screen</td><td>1 – 9</td></tr>
<tr><td>Grab what is in the room</td><td>E <em>or</em> Space</td></tr>
<tr><td>Draw or holster your weapon</td><td>Q</td></tr>
<tr><td>Flashlight on or off</td><td>F</td></tr>
<tr><td>Patch up with a medkit</td><td>H</td></tr>
<tr><td>Raise your crew on the radio</td><td>R</td></tr>
<tr><td>Confirm or advance</td><td>Enter</td></tr>
</table>
The number keys count the options listed on your screen from the top down, so whatever is written next to a 3 is what a 3 does. The suit won't fire a key with nothing under it.
Your cargo is worked by hand from the grid in the sidebar. Click a slot to open it and you get everything that slot can do: a usable item gets used, gear gets worn, a weapon gets drawn, scrap just opens for a look.
<h3>Terminal Commands</h3>
The terminal is the only thing on the ship the company trusts you with. Everything it answers to is below, and typing /help at the prompt gets you the same list with the commands clickable. A few only answer when they make sense, so /takeoff does nothing in orbit.
<<print setup.handbookCommandTable()>>
<h3>Notes from the Suit Engineers</h3>
The hatch bolt is a manual safety. Engaging it physically jams the door frame against the hull, so the intruder population local to whatever planet you're sleeping on can't pry their way in. The trade-off is the door doesn't open until you release the bolt either, so don't bolt yourself in if you're bleeding and need to get out.
Ship lights run off the same line as life support and they don't switch off when it gets dark outside, you may have noticed. The ship is the safest room you have, and the company would prefer you sleep in it.
</div>
<div class="handbook-back">
<<link "Back to handbook">><<goto "Handbook">><</link>>
</div>
</div><<if not $planet or $planet.id neq "sphinxter-42" or not $planet.bazaarMap>><<goto "PlanetSurface">>
<<elseif setup.cityClosed()>>
<<run setup.showUseToast("The gates come down at sundown and you get walked back out to the sand with everyone else.", { dwell: 4200 })>>
<<goto "PlanetSurface">>
<<else>>
<<set _map to $planet.bazaarMap>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<set _feat to _room.bazaarFeature>>
<<if _feat and not _feat.discovered>><<set _feat.discovered to true>><</if>>
<<run setup.stopAmbient('encounter')>>
<div class="ship-header">SPHINXTER-42 — THE BAZAAR</div>
<<roomImage "bazaar">>
<<print setup.renderMiniMap(_map)>>
<<if _feat and not (_feat.kind eq "beggar" and $beggar and $beggar.fled)>>
<<switch _feat.kind>>
<<case "shaman">>
<div class="bazaar-stall is-shaman">
<div class="bazaar-stall-head"><img class="bazaar-stall-icon" src="Images/ui/minimap/shaman.png" alt=""><span>THE FORTUNE-TELLER</span></div>
<<if setup.tarotReadToday()>>
<<set _hrs to setup.fortuneHoursLeft()>>
<p class="action-narration">She's still got your cards laid out, and she taps them when she sees you like she's proud of them.</p>
<div class="npc-line is-shaman"><span class="speaker">Fortune-teller</span><span class="speech">i already read you, sweet thing. this one's still running, the cards won't change their mind for another <<= _hrs>> hour<<if _hrs neq 1>>s<</if>>. come back when it's spent and we'll turn some new ones.</span></div>
<div class="tarot-today">
<<for _tc range $fortune.cards>>
<span class="tarot-card" @style="'background-image:url(' + setup.tarotCardImg(_tc) + ')'"></span>
<</for>>
</div>
<div @class="'tarot-verdict is-' + ($fortune.vibe || 'neutral')">
<div class="tv-line"><<= $fortune.verdict>></div>
<div class="tarot-chips">
<<set _todayChips to setup.tarotEffectChips({ expMult: $fortune.expMult, lootMult: $fortune.lootMult, luck: $fortune.luck })>>
<<for _chip range _todayChips>>
<span @class="'tarot-chip ' + (_chip.good ? 'is-good' : 'is-bad')"><<= _chip.txt>></span>
<</for>>
</div>
</div>
<<else>>
<<set _tp to setup.tarotPrice()>>
<p class="action-narration">A small woman behind a low table waves you down with both hands, a worn deck squared up in front of her. She fans it, gathers it, fans it again, never once looking down at her own hands.</p>
<div class="npc-line is-shaman"><span class="speaker">Fortune-teller</span><span class="speech">you! yes, you. sit. i'll read your day for you, all of it, the good and the rotten, whatever the cards feel like coughing up. <<= _tp>> credits.<<if $fortune.reads gt 0>> i know, i know, i've gone up. word got around i'm the real thing.<<else>> a fair price, for knowing what's coming.<</if>></span></div>
<div class="bazaar-stall-actions">
<<if $player.credits gte _tp>>
<<link `'<span class="action-label">Have her read your day</span><span class="action-hint"><span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + _tp + '</span></span>'`>><<set $player.credits -= _tp>><<run setup.openTarotOverlay()>><</link>>
<<else>>
<div class="bazaar-soon"><img class="bazaar-soon-coin" src="Images/ui/credits.png" alt=""><span class="action-label">Have her read your day</span><span class="action-hint">you can't cover <<= _tp>> credits</span></div>
<</if>>
</div>
<</if>>
</div>
<<case "trader">>
<div class="bazaar-stall is-trader">
<div class="bazaar-stall-head"><img class="bazaar-stall-icon" src="Images/ui/minimap/trader.png" alt=""><span>QASIM — ANTIQUITIES</span></div>
<p class="action-narration">His table is the only one down here laid with a cloth, gold and glass and stripped company tech set out like it means something. He watches your bag more than your face.</p>
<div class="npc-line is-trader"><span class="speaker">Qasim</span><span class="speech">come, come. everything on this cloth is worth more than what you're holding, and i will still trade you for it, because i am generous and because i will be eating tonight either way.</span></div>
<div class="bazaar-stall-actions">
<<if setup.qasimHasOfferable()>>
<<link '<img class="action-icon" src="Images/ui/minimap/trader.png" alt=""><span class="action-label">Put something on his cloth</span><span class="action-hint">He weighs the whole pile against the whole pile</span>'>><<run setup.openQasimOverlay()>><</link>>
<<else>>
<div class="bazaar-soon"><img class="action-icon" src="Images/ui/minimap/trader.png" alt=""><span class="action-label">Put something on his cloth</span><span class="action-hint">You have nothing he would take</span></div>
<</if>>
</div>
</div>
<<case "beggar">>
<div class="slime-block is-beggar">
<div class="slime-block-row">
<div class="slime-block-frame"><img src="Images/ui/beggar_portrait.jpg" alt="the beggar"></div>
<div class="slime-block-text">
<div class="slime-block-title">THE BEGGAR</div>
<<if ($beggar.male + $beggar.female) gt 0>>
<div class="slime-block-desc">Back in his gap between the stalls with the cup and the wineskin, and the second he clocks you his face splits into that gummy grin. He remembers you.</div>
<<else>>
<div class="slime-block-desc">An old man folded into the gap between two stalls, chipped cup and half-empty wineskin in front of him, and a smell you can place from here. He's been watching you since you turned the corner.</div>
<</if>>
</div>
</div>
<<if ($beggar.male + $beggar.female) gt 0>>
<div class="npc-line is-beggar"><span class="speaker">Beggar</span><span class="speech">heh... heh, heeey. knew you'd come round again, sweetheart. go on then, you know where the cup is.</span></div>
<<else>>
<div class="npc-line is-beggar"><span class="speaker">Beggar</span><span class="speech">heh... heh. spare a coin for an old man, eh? lemme get a good look at what the company's putting out these days. few credits in the cup, go on, go on.</span></div>
<</if>>
<div class="slime-block-links">
<<if $player.credits gte setup.BEGGAR_TIP>>
<div class="ship-action slime-link">
<<link `'<span class="action-label">Drop a few credits in the cup</span><span class="action-hint"><span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + setup.BEGGAR_TIP + '</span></span>'`>>
<<run setup.beggarTip()>>
<<goto "Bazaar">>
<</link>>
</div>
<<else>>
<div class="ship-action is-spent"><span class="action-label">Drop a few credits in the cup</span><span class="action-hint">you've nothing to spare him</span></div>
<</if>>
</div>
</div>
<<case "vip">>
<div class="bazaar-stall is-vip">
<div class="bazaar-stall-head"><img class="bazaar-stall-icon" src="Images/ui/minimap/vip.png" alt=""><span>THE STAIRS DOWN</span></div>
<p class="action-narration">A gap in the awnings opens onto a stairwell going down under the market, warm light and a slow drum drifting up out of it with a smell of perfume and old sweat. What's folded onto the stool across the top step isn't so much a man as a wall someone bolted a head onto, bald, arms crossed over a chest you couldn't get both hands around, the lower half of his face caged in a breathing mask of tubes and dull steel.</p>
<div class="bazaar-stall-media"><img class="bazaar-doorman-portrait" src="Images/ui/doorman_portrait.jpg" alt=""></div>
<div class="npc-line is-guard"><span class="speaker">Doorman</span><span class="speech">Floor's closed. <span class="whisper">don't ask me when.</span> Owner's got people tearing the whole downstairs out. Come back when there's something down there worth your twenty.</span></div>
<div class="bazaar-stall-actions">
<div class="bazaar-soon"><img class="bazaar-soon-coin" src="Images/ui/minimap/vip.png" alt=""><span class="action-label">Head down the steps</span><span class="action-hint">In development until update 0.3</span></div>
</div>
</div>
<<case "event">>
<div class="bazaar-stall is-event">
<div class="bazaar-stall-head"><img class="bazaar-stall-icon" src="Images/ui/minimap/event.png" alt=""><span>A COMMOTION</span></div>
<<if _feat.resolved>>
<p class="action-narration">Whatever it was, it's over. The stall-keeper is restacking his cups and the crowd's already forgotten it. They forget everything down here fast.</p>
<<else>>
<p class="action-narration">Two stalls down a man has another by the collar, up against his own cart, shouting in that language you don't have, spit flying, a small crowd thickening around them the way crowds do when they smell a free show. The one being held has a hand creeping back toward something on the cart.</p>
<div class="bazaar-stall-actions">
<<link '<span class="action-label">Step in between them</span><span class="action-hint">Not your fight. Do it anyway.</span>'>>
<<set _feat.resolved to true>>
<<if $player.health gt 12>>
<<set $player.health -= 8>>
<<set $useMessage to "You knock the cart-man's hand off whatever he was reaching for and take an elbow in your own ribs for it, but the shouting stops and the crowd loses interest. Costs you a little skin. Nobody thanks you.">>
<<else>>
<<set $useMessage to "You shove between them and the crowd peels you apart before it gets worse. You walk off with your ribs intact and nothing to show for it.">>
<</if>>
<<goto "Bazaar">>
<</link>>
<<link '<span class="action-label">Watch with everyone else</span><span class="action-hint">Free show</span>'>>
<<set _feat.resolved to true>>
<<set $useMessage to "The cart-man gets a hand on a short knife and the other lets go fast, both of them backing off cursing. The crowd sighs, disappointed it didn't go further, and folds back into the market.">>
<<goto "Bazaar">>
<</link>>
</div>
<</if>>
</div>
<<case "pillory">>
<div class="slime-block is-pillory">
<div class="slime-block-row">
<div class="slime-block-frame"><img src="Images/ui/city/pillory_poi.jpg" alt="a wooden pillory"></div>
<div class="slime-block-text">
<div class="slime-block-title">THE PILLORY</div>
<div class="slime-block-desc"><<if $pillory and $pillory.been>>Weathered wood planted in the middle of the lane, head-hole and two wrist-holes worn smooth, empty today. You know how it smells from the inside now, and you don't slow down looking at it.<<else>>Weathered wood planted in the middle of the lane, a head-hole and two wrist-holes worn smooth by whoever was folded into them. Empty today, and the market drifts past it like furniture.<</if>></div>
</div>
</div>
<div class="slime-block-links">
<div class="ship-action slime-link">
<<linkreplace '<span class="action-label">Read the sign nailed to the crossbar</span><span class="action-hint">See what it's for</span>'>>
<p class="pillory-sign">Hammered tin, letters punched through by hand. A price list, except the currency is hours. <b>Thief, till sundown. Cheat, a full day.</b></p>
<p class="pillory-sign-foot">No logo, no station number. The market handles its own.</p>
<<timed 20ms>><<run setup.decorateActionHotkeys && setup.decorateActionHotkeys()>><</timed>>
<</linkreplace>>
</div>
</div>
</div>
<<case "palace">>
<div class="bazaar-stall is-palace">
<div class="bazaar-stall-head"><img class="bazaar-stall-icon" src="Images/ui/minimap/palace.png" alt=""><span>THE PALACE</span></div>
<p class="action-narration">At the far end of the market the lanes open onto a walled plaza, and past it a palace rises out of the sand, domed and white and stupid with money, the only clean thing on the whole planet. Whoever runs Sphinxter runs it from in there. Two guards in good armor stand the gate and clock you the second you slow down.</p>
<div class="npc-line is-guard"><span class="speaker">Guard</span><span class="speech">keep walking. the gate opens for names, and you don't have one yet. come back when the city knows who you are, off-worlder. if it ever does.</span></div>
<p class="action-narration is-cold">There's no arguing it. You're nobody here. Not yet.</p>
</div>
<</switch>>
<<else>>
<div class="room-desc"><<print _room.desc>></div>
<</if>>
<div class="ship-actions">
<<for _exDir, _exTarget range _room.exits>>
<<capture _exDir, _exTarget>>
<<set _tgt to _map.rooms[_exTarget]>>
<<set _exHint to (_tgt and _tgt.bazaarFeature and _tgt.bazaarFeature.discovered) ? setup.bazaarFeatureLabel(_tgt.bazaarFeature.kind) : "deeper into the market">>
<div class="ship-action">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_exDir) + '</span> ' + setup.dirLabel(_exDir) + '</span><span class="action-hint">' + _exHint + '</span>'`>>
<<set _map.previousRoom to _map.current>>
<<set _map.current to _exTarget>>
<<run setup.playSound('step_gravel', { volume: 0.4 })>>
<<tick 3>>
<<goto "Bazaar">>
<</link>>
</div>
<</capture>>
<</for>>
<<if _room.id eq "r0">>
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/bazaar.png" alt=""><span class="action-label">Back out into the dunes</span><span class="action-hint">Sphinxter surface</span>'>><<set $planet.location to "outdoor">><<goto "PlanetSurface">><</link>>
</div>
<</if>>
</div>
<</if>><<run setup.ensureBarn()>><<run setup.ensureBarnQuest()>>
<div class="ship-header">THE BARN</div>
<<roomImage "barn_interior">>
<div class="npc-scene is-barn-scene">
<div class="npc-scene-step">
<p class="action-narration">The barn sits at the top of the meadow, sod roof, big double doors thrown open. It stinks of animal and old straw a hundred feet before you reach it. Up close the sling is field-dressed and filthy and the arm inside it isn't moving at all. The big man works the fork one-handed anyway, half a load at a time. He looks you over without putting the fork down.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">off-worlder. we don't get many out this far. if you're sellin' then no. i ain't got nothin' to spend and nowhere to put it neither. if you're after work, hold still a second, let me look at you.</span></div>
<div class="scene-advance"><<linkreplace "Ask what the work is">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Depends what it pays.</span></div>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">ha. good. look yonder down the row. half of 'em standin' empty. three weeks, that's since the arm. i can't fill what i can't work, so. you put an animal of your own in one, you run it, i take a cut of what comes out. that's the whole of it.</span></div>
<p class="action-narration is-tense">He gets the fork planted in the dirt and looks at you properly for the first time, taking his time over it.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">one thing. the animals i got are mine, you keep your hands off 'em. yours you find yourself, out in the hills. you'll be wanting a rig besides, i'll spare you the rope for that. and there's supper in the house when you want it. don't go bein' proud about it.</span></div>
<div class="scene-advance"><<link "Take the job">>
<<set _hire to setup.barnHire()>>
<<run setup.playSound('step_grass', { volume: 0.4 })>>
<<if _hire.where eq "storage">><<run setup.showUseToast("Your bag was full, so the rope's in ship storage. Move it to your cargo before you go hunting.", { dwell: 4200 })>><<elseif _hire.where eq "cargo">><<run setup.showUseToast("He tosses you a coil of rope. Go find a breeding mount, then a horse to put in it.", { variant: 'hint', dwell: 4200 })>><</if>>
<<goto "PlanetSurface">>
<</link>></div>
</div>
<</linkreplace>></div>
</div>
</div>
<div class="ship-actions">
<div class="ship-action dir-start"><<link '<img class="action-icon" src="Images/ui/minimap/bazaar.png" alt=""><span class="action-label">Step back out to the meadow</span><span class="action-hint">Lubea-21 surface</span>'>><<goto "PlanetSurface">><</link>></div>
</div><<run setup.ensureBarn()>><<run setup.ensureBarnQuest()>><<run setup.barnTick()>><<run setup.barnLogToast()>>
<<set _b to $barn>>
<div class="ship-header">YOUR STALL</div>
<<roomImage "barn_interior">>
<div class="barn-hub">
<<if $barn.rigLine>>
<<set $barn.rigLine to false>>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">that'll hold. bolted down proper too, which is more than i expected. now go find somethin' to stand in it. that part's the hills' business, not mine.</span></div>
<</if>>
<<if setup.barnStallEntitlement() gt ($barn.stalls || 1)>>
<div class="ship-action barn-install">
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Go see what the farmer wants</span><span class="action-hint">He's stood by the next stall along, waiting on you</span>'>>
<<goto "BarnStallUnlock">>
<</link>>
</div>
<</if>>
<<if setup.pinkMoonActive()>>
<p class="action-narration is-tense">You hear it from the yard before you have the door open. Not one animal, all of them, shifting and knocking against the boards in a rhythm that has nothing to do with feeding time. The whole barn is awake and the moon coming through the slats is the wrong colour.</p>
<<if setup.ensureWorkers().length>>
<p class="action-narration is-cold">Your hands are outside, sat against the fence with their backs to the building. None of them will look at you. None of them are going in there tonight, and none of them are going to say so out loud.</p>
<<else>>
<p class="action-narration is-cold">There's nobody here to work them but you.</p>
<</if>>
<p class="action-narration">They recover in a fraction of the usual time under a moon like this. Everything you take tonight, they will make again before morning.</p>
<</if>>
<<if _b.mounts lt (_b.stalls || 1) and setup.cargoHasItem('breeding_mount')>>
<div class="ship-action barn-install">
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Bolt the breeding mount in</span><span class="action-hint">The rig a horse works you in</span>'>>
<<run setup.barnInstallMount()>>
<<if not $barn.rigSpoken>><<set $barn.rigLine to true>><<set $barn.rigSpoken to true>><</if>>
<<run setup.playSound('rusty_hatch', { volume: 0.4 })>>
<<run setup.showUseToast("The mount's bolted to the stall floor. Now you need a horse to put in front of it.", { variant: 'hint', dwell: 4200 })>>
<<goto "Barn">>
<</link>>
</div>
<<elseif _b.mounts lt (_b.stalls || 1)>>
<p class="action-narration is-cold"><<if _b.mounts gt 0>>The new stall's swept and empty, and there's no rig in it. The farmer rents you the floor, not the frame, so that's another breeding mount to find before anything can stand in there.<<else>>The stall's swept and empty. There's nowhere to strap a body yet, and the farmer won't lend you his rig. You need to recover a breeding mount and haul it back here first.<</if>></p>
<</if>>
<<set _limit to setup.BARN.HORSE_LIMIT>>
<div class="barn-roster">
<<for _i to 0; _i lt _limit; _i++>>
<<capture _i>>
<<if _i lt _b.horses.length>>
<<set _h to _b.horses[_i]>>
<<set _can to setup.barnCanMilk(_h)>>
<div @class="'barn-horse-card' + (_h.type eq 'hybrid' ? ' is-hybrid' : '')">
<<= setup.barnHorsePanel(_h)>>
<<= setup.barnSlotsHtml(_h, _i)>>
<div class="barn-card-actions">
<div class="barn-actmenu">
<span class="barn-actmenu-trigger" onclick="setup.barnMenuToggle(this)">
<img class="barn-actmenu-ic" src="Images/ui/minimap/barn.png" alt="">
<span class="barn-actmenu-label"><<= setup.barnMenuLabel(_h)>></span>
<span class="barn-actmenu-caret"></span>
</span>
<div class="barn-actmenu-list">
<<if _can.ok>>
<div class="ship-action">
<<link `'<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">' + setup.barnMilkLabel(_h) + '</span>'`>>
<<set _res to setup.barnMilk($barn.horses[_i])>>
<<set $barnScene to { ok: _res.ok, liters: _res.liters, level: _res.level, hole: (_res.clip ? _res.clip.hole : 'anal'), path: (_res.clip ? _res.clip.path : ''), name: (_res.horse ? _res.horse.name : 'the horse'), type: (_res.horse ? _res.horse.type : 'animal'), leveledTo: _res.leveledTo }>>
<<goto "BarnMilk">>
<</link>>
</div>
<<else>>
<div class="ship-action bazaar-soon" @title="setup.barnMilkWhy(_can, _h)">
<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label"><<= setup.barnMilkLabel(_h)>></span>
</div>
<</if>>
<<if _can.ok>>
<div class="ship-action">
<<link `'<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Set ' + setup.barnHW(_h) + ' on the breeding mount</span>'`>>
<<set _am to setup.barnAutoMount($barn.horses[_i])>>
<<set $barnScene to { ok: _am.ok, auto: true, liters: _am.liters, spilled: _am.spilled, path: (_am.clip ? _am.clip.path : ''), name: (_am.horse ? _am.horse.name : 'the horse'), type: (_am.horse ? _am.horse.type : 'animal'), hand: (_am.hand or null) }>>
<<goto "BarnMilk">>
<</link>>
</div>
<<else>>
<div class="ship-action bazaar-soon" @title="setup.barnMilkWhy(_can, _h)">
<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Set <<= setup.barnHW(_h)>> on the breeding mount</span>
</div>
<</if>>
</div>
</div>
</div>
</div>
<<elseif _i lt _b.stalls>>
<div class="barn-horse-card is-empty-stall">
<div class="barn-empty-inner"><img class="barn-empty-silhouette" src="Images/ui/barn/horse_idle_r.png" alt="">
<div class="barn-empty-title">Empty Stall</div>
<div class="barn-empty-sub"><<if _i lt (_b.mounts || 0)>>Rope a horse off the hills and it'll stand here<<else>>Bolt in a breeding mount, then rope a horse<</if>></div>
</div>
</div>
<<else>>
<div class="barn-horse-card is-locked">
<div class="barn-empty-inner">
<div class="barn-lock-stack"><img class="barn-empty-silhouette" src="Images/ui/barn/horse_idle_r.png" alt=""><img class="barn-lock-ic" src="Images/ui/barn/lock_gray.png" alt=""></div>
<div class="barn-empty-title">NOT YET UNLOCKED</div>
<div class="barn-empty-sub">Upgrade your operation to run a <<= (_i + 1)>><<= (_i eq 1 ? "nd" : (_i eq 2 ? "rd" : "th"))>> stall</div>
<<if _i eq (_b.stalls || 1)>><<= setup.barnStallProgressHtml()>><</if>>
</div>
</div>
<</if>>
<</capture>>
<</for>>
</div>
<<= setup.barnWorkersHtml()>>
<<set _fullPails to setup.barnFullBucketCount()>>
<<if _fullPails gt 0>>
<div class="ship-action">
<<link `'<img class="action-icon" src="Images/items/bucket_full.png" alt=""><span class="action-label">Sell what you have collected</span><span class="action-hint">' + _fullPails + ' pail' + (_fullPails eq 1 ? '' : 's') + ' with product in ' + (_fullPails eq 1 ? 'it' : 'them') + '. He takes his cut off the top</span>'`>>
<<set _sale to setup.barnSellAllBuckets()>>
<<run setup.playSound('sell_cash', { volume: 0.6 })>>
<<if _sale.ok>><<run setup.showUseToast("Sold " + _sale.liters + "L out of " + _sale.pails + " pail" + (_sale.pails eq 1 ? "" : "s") + ". He skims " + _sale.cut + ", you clear " + _sale.net + " credits.", { variant: 'hint', dwell: 4200 })>><</if>>
<<goto "Barn">>
<</link>>
</div>
<<else>>
<div class="ship-action bazaar-soon">
<img class="action-icon" src="Images/items/bucket_empty.png" alt=""><span class="action-label">Sell what you have collected</span>
<span class="action-hint">Nothing collected yet. Drop a bucket into a stall and milk into it.</span>
</div>
<</if>>
<<if _b.hold>>
<<if setup.ensureWorkers().length lt setup.workerCap()>>
<div class="ship-action">
<<link `'<img class="action-icon" src="Images/items/rope.png" alt=""><span class="action-label">Walk ' + _b.hold.serial + ' in from the hold</span><span class="action-hint">Still tied. Cut them loose in here and they work for you</span>'`>><<goto "BarnNewHand">><</link>>
</div>
<<else>>
<div class="ship-action bazaar-soon">
<img class="action-icon" src="Images/items/rope.png" alt=""><span class="action-label">Walk <<= _b.hold.serial>> in from the hold</span>
<span class="action-hint">You're already running <<= setup.workerCap()>> hands. Nowhere to put them until one goes.</span>
</div>
<</if>>
<</if>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/items/haystack.png" alt=""><span class="action-label">Browse through the wares</span><span class="action-hint">Buckets, a spare rope, and feed for the stock</span>'>>
<<run setup.openBarnShopOverlay()>>
<</link>>
</div>
</div>
<div class="ship-actions">
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/bazaar.png" alt=""><span class="action-label">Step back out to the meadow</span><span class="action-hint">Lubea-21 surface</span>'>><<goto "PlanetSurface">><</link>>
</div>
</div>
<<if setup.barnStallEntitlement() lte ($barn.stalls || 1)>>
<<goto "Barn">>
<</if>>
<<set _suNext to ($barn.stalls || 1) + 1>>
<div class="ship-header">THE BARN</div>
<<roomImage "barn_interior">>
<div class="npc-scene is-barn-scene">
<<if _suNext gte 3>>
<div class="npc-scene-step">
<p class="action-narration">He isn't standing this time. He's sat on an upturned crate at the end of the row with the sling off and his bad arm laid across his knee, watching the two stalls you already run. Behind him the last door is open. The barn hasn't been this loud since you got here.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">that's the last one. after that there ain't no more barn to give you.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Ask him if he's alright with that">>
<div class="npc-scene-step">
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">i run all three myself for eleven years. then the arm. then you.</span></div>
<p class="action-narration is-tense">He says it flat, the way he says everything, eyes still on the row.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">i ain't gonna thank you. you're gettin' paid. but the stock's better fed than it was, and i seen you out there at hours you didn't have to be. hours you didn't. so take it, keep takin' my quarter, and we'll both pretend that's all this is.</span></div>
</div>
<div class="scene-advance"><<link "Take the last stall">>
<<set _suGrant to setup.barnGrantStall()>>
<<run setup.playSound('rusty_hatch', { volume: 0.4 })>>
<<run setup.showUseToast("Stall 3 is yours. That's the whole row. Fill it and the barn's running at everything it has.", { variant: 'hint', dwell: 4600 })>>
<<run setup.passTime(10)>>
<<goto "Barn">>
<</link>></div>
<</linkreplace>></div>
<<else>>
<div class="npc-scene-step">
<p class="action-narration">He's got the bolt off the next stall down and the door hooked open, and he's standing in it with his good arm on the frame like he's been waiting there a while. The straw inside is fresh. Somebody laid it this morning.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">you put the work in. i watched you do it.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Ask him what he wants for it">>
<div class="npc-scene-step">
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">nothin'. that ain't how it works. you don't buy a stall off me. you earn the run of one. and you done that.</span></div>
<p class="action-narration is-tense">He steps out of the doorway and walks off toward the yard, and calls the rest of it back over his shoulder without turning round.</p>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">same cut. there's a bunk behind it. but don't go hiring off the back of an empty stall, put an animal in there first. ain't nobody sleepin' on my property to watch straw.</span></div>
</div>
<div class="scene-advance"><<link "Take the stall">>
<<set _suGrant to setup.barnGrantStall()>>
<<run setup.playSound('rusty_hatch', { volume: 0.4 })>>
<<run setup.showUseToast("Stall " + (_suGrant ? _suGrant.stalls : $barn.stalls) + " is yours. It needs a rig of its own before anything can stand in it.", { variant: 'hint', dwell: 4200 })>>
<<run setup.passTime(10)>>
<<goto "Barn">>
<</link>></div>
<</linkreplace>></div>
<</if>>
</div>
<<if not $barn or not $barn.hold>><<goto "Barn">><<else>>
<<set _nhCap to $barn.hold>>
<<set _nhM to (_nhCap.gender eq 'm')>>
<<set _nhHe to (_nhM ? 'he' : 'she')>>
<<set _nhHim to (_nhM ? 'him' : 'her')>>
<<set _nhHis to (_nhM ? 'his' : 'her')>>
<div class="ship-header">YOUR STALL</div>
<<roomImage "barn_interior">>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration">You walk <<print _nhHim>> down the ramp and across the yard with your hand in the cord, and <<print _nhHe>> goes quiet the moment the barn smell hits, because it doesn't smell like a ship or a station or anything else <<print _nhHe>> has been inside since <<print _nhHe>> was assigned. Straw and animal and warm wood. <<print _nhHe>> stops on <<print _nhHis>> own in the middle of the floor and looks at the stalls.</p>
</div>
<div class="scene-advance"><<linkreplace "Cut the rope">>
<div class="npc-scene-step">
<p class="action-narration">You get the knife under the cord at <<print _nhHis>> wrists and it comes apart in two goes. <<print _nhHe.charAt(0).toUpperCase() + _nhHe.slice(1)>> brings <<print _nhHis>> arms round in front and holds them there, working the feeling back into <<print _nhHis>> hands. There's a whole meadow through the open door behind you. <<print _nhHe.charAt(0).toUpperCase() + _nhHe.slice(1)>> stays where <<print _nhHe>> is.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _nhCap.serial>></span><span class="speech">where's your officer</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">there isn't one</span></div>
<p class="action-narration is-cold">That lands harder than the rope did.</p>
</div>
<div class="scene-advance"><<linkreplace "Tell them how it works">>
<<set _nhRes to setup.captiveDeliver()>>
<div class="npc-scene-step">
<<if _nhRes.ok>>
<p class="action-narration">You lay it out flat, because there's no version of it that sounds good dressed up. Nobody is coming to log <<print _nhHim>> here. Nobody logged <<print _nhHim>> out there. <<print _nhHe>> knows it and has never once said so out loud. The farmer takes his cut, the stock get fed, and whatever <<print _nhHe>> makes off the rail <<print _nhHe>> keeps the use of. It's not freedom. It's a roof and a job and a name that isn't a serial number.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _nhCap.serial>></span><span class="speech">and if i say no</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">then you walk. it's a long way to anywhere</span></div>
<p class="action-narration"><<print _nhHe.charAt(0).toUpperCase() + _nhHe.slice(1)>> stands there a while with <<print _nhHis>> wrists still rope-marked, looking at the straw, and then <<print _nhHe>> asks what <<print _nhHe>> should be called instead. You pick one off the board by the door where the farmer keeps the names of everyone who has worked this barn.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _nhRes.worker.name>></span><span class="speech"><span class="whisper">alright</span></span></div>
<<else>>
<p class="action-narration">There's nowhere to put <<print _nhHim>>. Every stall on the roster already has a body standing in it and the farmer isn't running a shelter. You walk <<print _nhHim>> back up the ramp and tie the cord off again. <<print _nhHe.charAt(0).toUpperCase() + _nhHe.slice(1)>> lets you.</p>
<</if>>
</div>
<div class="scene-advance">
<<link "Get back to work">>
<<run setup.advanceMinutes(30)>>
<<if _nhRes.ok>><<run setup.playSound('step_grass', { volume: 0.35 })>><<run setup.showUseToast(_nhRes.worker.name + " is on the roster. Drag them onto a stall.", { variant: 'hint', dwell: 4600 })>><</if>>
<<goto "Barn">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<</if>><<if not $barnHand>><<goto "Barn">>
<<else>>
<div class="ship-header">THE RAIL</div>
<<roomImage "barn_interior">>
<div class="npc-scene is-barn-scene">
<div class="npc-scene-step">
<<if $barnHand.path>><div class="npc-scene-media"><<= setup.mediaTag($barnHand.path)>></div><</if>>
<<= $barnHand.lines>>
</div>
</div>
<div class="ship-actions">
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Leave them to it</span><span class="action-hint">Back to the stalls</span>'>><<goto "Barn">><</link>>
</div>
</div>
<</if>><<if not $barnScene or not $barnScene.ok>><<goto "Barn">>
<<else>>
<<set _wasFirst to ($barnQuest.stage eq "first_milk")>>
<<if _wasFirst>><<set $barnQuest.stage to "running">><</if>>
<div class="ship-header"><<if $barnScene.auto>>COLLECTING<<else>>MILKING<</if>></div>
<<roomImage "barn_interior">>
<div class="npc-scene is-barn-scene">
<div class="npc-scene-step">
<<if $barnScene.path>><div class="npc-scene-media"><<= setup.mediaTag($barnScene.path)>></div><</if>>
<<if $barnScene.auto>><<= setup.barnAutoMountProse($barnScene)>><<else>><<= setup.barnMilkProse($barnScene)>><</if>>
<<if _wasFirst>>
<div class="npc-line is-farmer"><span class="speaker">Farmer</span><span class="speech">huh. you actually done it. figured you'd chicken out, i'll be honest. brang the bucket round when it's full and we'll square up. keep that one fed, it'll earn for the both of us.</span></div>
<p class="action-narration is-cold">You're on the payroll now, for whatever that's worth on a planet like this.</p>
<</if>>
</div>
</div>
<div class="ship-actions">
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Back to the stall</span><span class="action-hint">Wipe down, check the others</span>'>><<goto "Barn">><</link>>
</div>
</div>
<</if>><<silent>>
<<if not $pillory>><<set $pillory to { been: false, times: 0 }>><</if>><<set $pillory.been to true>><<set $pillory.times to ($pillory.times || 0) + 1>>
<<set $player.health to Math.max(1, Math.round(($player.maxHealth||100) * 0.35))>>
<<set $player.lust to Math.min(100, ($player.lust||0) + 35)>>
<<run setup.passTime(180)>>
<<set _looted to setup.stealCargo(4)>>
<<set _fem to ($body.gender eq "female")>>
<<set _tits to (($body.chest||0) >= 2)>>
<<set _penet to setup.pickMedia(_fem ? "pillory_f_penet" : "pillory_m_penet")>>
<<set _beat2 to (_fem ? setup.pickMedia("pillory_f_creature") : setup.pickMedia("pillory_m_penet"))>>
<<set _finish to setup.pickMedia(_fem ? "pillory_f_finish" : "pillory_m_finish")>>
<<set _milk to setup.pickMedia("pillory_milk")>>
<<set _more to setup.pickMedia(_fem ? "pillory_f_more" : "pillory_m_more")>>
<</silent>>
<div class="npc-scene is-trader">
<div class="npc-scene-step">
<p class="action-narration is-impact">They're on you before you stop rolling.</p>
<p>Two of them get you up by the arms and walk you across the square without saying anything, and the crowd opens up and closes again behind you like water. <<if _looted and _looted > 0>>One of them goes through your bag on the way and hands what's worth handing back to Qasim, who counts it in front of you and doesn't look up.<</if>> The frame's already there in the middle of the market, waiting the way it always is. They fold your neck and your wrists down into the wood, drop the bar across the back of it, and the lock goes home flat and final about six inches from your ear.</p>
<div class="npc-line is-trader"><span class="speaker">Qasim</span><span class="speech">this is what the frame is for. you don't put your hand in a man's goods in his own market. the town takes the rest out of you, that part isn't mine. i'll have my property back off you before sundown either way.</span></div>
<p class="action-narration is-cold">They go back to the wall they came off. Somebody down the lane is already telling somebody else, and the market keeps moving around you like you're a post someone hammered in.</p>
</div>
<div class="scene-advance"><<linkreplace "The first one steps up">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<= setup.mediaTag(_penet)>></div>
<<if _fem>>
<p>Hands settle on your hips from behind. No asking, no warning, just a stranger lining himself up with something the frame is holding perfectly still for him, and then he's in you to the hilt and the whole crowd can see your face do what it does.</p>
<<else>>
<p>Someone spits in their palm and gets a grip on your hips, and the frame holds you bent and open and steady while they work their way into your ass, grunting, taking their time because you're not going anywhere.</p>
<</if>>
<p class="action-narration">*plap* *plap* *plap*</p>
</div>
<div class="scene-advance"><<linkreplace "Something bigger lines up">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<= setup.mediaTag(_beat2)>></div>
<<if _fem>>
<p>The next thing that steps up isn't a man. Out here the frame's open to whatever's got the coin or the nerve, and what lines up behind you is bigger than anything human and doesn't care that you're not built for it. It uses you anyway, and the stretch of it punches the air clean out of you and drags a sound out of your throat you didn't know you had in you.</p>
<<else>>
<p>The next one doesn't wait for the first to finish pulling out. He shoulders in, gets you by the hips, and the two of them trade you back and forth like the frame's a turnstile and you're just the thing on the other side of it.</p>
<</if>>
<p class="action-narration">*plap* *plap* *plap*</p>
</div>
<div class="scene-advance"><<linkreplace "...and finishes">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<= setup.mediaTag(_finish)>></div>
<p>They empty into you and pull out and the next one's already unbuckling. There's a gap, a breath, where you hang in the frame dripping what the last one left and try to remember your own name. It doesn't last.</p>
<<if _tits>>
<div class="npc-scene-media"><<= setup.mediaTag(_milk)>></div>
<p>Someone crouches under you and takes a heavy tit in each hand and works them like they're trying to get milk, and by the look on their face they're getting something.</p>
<</if>>
</div>
<div class="scene-advance"><<linkreplace "The second, and the third">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<= setup.mediaTag(_more)>></div>
<p>You lose count somewhere in the middle of the second one. It becomes a rhythm, a shift-change, one set of hands trading off to the next, the sun crawling across the square, the frame holding you up long after your legs have quit. Two of them. Three. You stop counting the way you'd stop counting rain.</p>
<p class="action-narration is-cold">By the time the light goes orange you're a thing that got used, cum-slick from your hair to the backs of your knees, and the market has already lost interest and moved on to the evening's business.</p>
</div>
<div class="scene-advance"><<link "The bar finally lifts">>
<<run setup.addMess('ass', 'cum', 7)>>
<<run setup.addMess('mouth', 'cum', 5)>>
<<run setup.addMess('chest', 'cum', (($body.chest||0) >= 2) ? 7 : 4)>>
<<set $useMessage to "The frame opens and you fold out of it onto the sand. Nobody helps you up. You gather what's left of yourself, find your suit, and pull it on over a body that's slick and reeking from your hair to the backs of your knees. You get out of the square before anyone gets a second idea, dripping the whole way. You're going to need a long shower. You're never doing that again.">>
<<goto "Bazaar">>
<</link>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<if not $planet or $planet.id neq "sphinxter-42">><<goto "PlanetSurface">><</if>>
<<run setup.stopAmbient('encounter')>>
<div class="ship-header">SPHINXTER-42 — THE PYRAMID DOOR</div>
<<roomImage "pyramid_entrance">>
<div class="room-desc">
Up close the ziggurat is bigger than it looked from the dunes, its lower third drowned in sand, the doorway a black mouth breathing cold air out into the heat. Hieroglyphs run deep around the frame in rows you can't read. Something about the dark past the threshold puts the hair up on your arms.
The cold coming off the threshold isn't natural for a place sitting in this much sun. Whatever's down there has been waiting a long time, and the only way to know what it's sitting on is to go in and take it.
</div>
<div class="ship-actions">
<<set _pdSealed to (setup.pyramidSealed() or setup.sphinxBarred())>>
<div @class="'ship-action' + (_pdSealed ? ' is-spent' : '')">
<<if setup.pyramidSealed()>>
<span class="action-label">The doorway is dark</span><span class="action-hint">You walked out of there carrying their things. It isn't letting you back in.</span>
<<elseif setup.sphinxBarred()>>
<img class="action-icon" src="Images/ui/minimap/sphinx.png" alt=""><span class="action-label">She has her back to you</span><span class="action-hint">Wrong answer. Not until you've left this rock and come back.</span>
<<elseif setup.sphinxPassed()>>
<<link '<span class="action-label">Step through the doorway</span><span class="action-hint">She let you by. Down into the tomb.</span>'>>
<<run setup.sphinxEnterPyramid()>>
<</link>>
<<else>>
<<link '<span class="action-label">Step through the doorway</span><span class="action-hint">Down into the tomb</span>'>>
<<run setup.openSphinxOverlay({ onPass: setup.sphinxEnterPyramid, onFail: setup.sphinxRefused })>>
<</link>>
<</if>>
</div>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/pyramid.png" alt=""><span class="action-label">Back out into the dunes</span><span class="action-hint">Sphinxter surface</span>'>><<goto "PlanetSurface">><</link>>
</div>
</div><<if not $planet or not $planet.indoor or $planet.indoor.biome neq "pyramid">>
The dark swims around you and the system bails you back out into the sun.
<<if $planet>><<set $planet.location to "outdoor">><</if>>
<br><br><<link "Continue">><<goto "PlanetSurface">><</link>>
<<else>>
<<set _map to $planet.indoor>>
<<run setup.setAmbient('base', (_map and _map.mummyRoomId) ? 'Sounds/ambient/mummy_breath.mp3' : 'Sounds/ambient/facility_dark.mp3', { volume: 0.40, fadeInMs: 1400 })>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<set _td to setup.INDOOR_TYPES[_room.type]>>
<<run setup.setAmbient('base', 'Sounds/ambient/facility_dark.mp3', { volume: 0.42 })>>
<<run setup.stopAmbient('encounter')>>
<<if setup.onSphinxter() and $player.hydration lte 0>><<goto "HeatCollapse">><</if>>
<<if $body.linenCollapse>>
<<set $body.linenCollapse to false>>
<<set $body.linen to null>>
<<goto "LinenCollapse">>
<</if>>
<<if $body.teasePending and not $walk.active>>
<<done>><<run setup.playBindingTease()>><</done>>
<</if>>
<<if _room.anubis and not _room.anubisResolved>>
<<set $anubisScene to { phase: "weigh" }>>
<<run setup.playSound('monster_roar', { volume: 0.45 })>>
<<goto "AnubisJudgment">>
<<elseif _room.mummy and not _room.mummyResolved and setup.mummyReadsYouAs() neq "kin" and setup.mummyOpeningPhase() eq "greet">>
<<set $mummyScene to { roomId: _room.id, phase: "greet", stolen: 0, fought: false, lines: [] }>>
<<run setup.playSound('monster_roar', { volume: 0.7 })>>
<<goto "MummyEncounter">>
<<else>>
<<set _mumGrab to (_room.mummy and not _room.mummyResolved and setup.mummyReadsYouAs() neq "kin")>>
<<if _mumGrab>>
<<run setup.playSound('monster_roar', { volume: 0.7 })>>
<<done>><<run setup.openMummyGrabQte($planet.indoor.current)>><</done>>
<</if>>
<<roomImage `_room.img ? _room.img : _room.type`>>
<div class="room-header">$planet.name — The Tomb — <<print (_td ? _td.name : "Chamber")>></div>
<<print setup.renderMiniMap(_map)>>
<<if $walk.active and $walk.queue.length gt 0>>
<<set _targetRoom to _map.rooms[$walk.target]>>
<<set _targetName to (_targetRoom ? setup.getRoomTypeData(_targetRoom).name : 'destination')>>
<div class="walk-banner">
Walking to <<print _targetName>> — <<print $walk.queue.length>> more <<if $walk.queue.length eq 1>>room<<else>>rooms<</if>>...
<<link "Stop">><<run setup.clearWalk()>><<goto "PyramidInterior">><</link>>
</div>
<<timed `(($settings && $settings.walkSpeed) || 0.5) + 's'`>>
<<if setup.walkStep()>>
<<run setup.playSound('step_gravel', { volume: 0.4 })>>
<<run setup.advanceMinutes(setup.moveMinutes(8))>>
<<run setup.tickPyramidMummies($planet.indoor)>>
<<run setup.tickHydration(true)>>
<</if>>
<<goto "PyramidInterior">>
<</timed>>
<</if>>
<div class="room-desc"><<print (_td ? _td.desc : "")>></div>
<<if _room.glyphs and _room.glyphs.length and not _room.glyphToldYou>>
<<set _room.glyphToldYou to true>>
<<run setup.fireCarvingToast(_room)>>
<</if>>
<<set _adjMummyDir to null>>
<<for _gxDir, _gxTargetId range _room.exits>>
<<if _map.rooms[_gxTargetId] and _map.rooms[_gxTargetId].mummy and not _map.rooms[_gxTargetId].mummyResolved>>
<<set _adjMummyDir to _gxDir>>
<</if>>
<</for>>
<<if _adjMummyDir>>
<<print setup.roomWarn(_adjMummyDir, "Something is dragging itself across stone on the other side of the " + setup.dirLabel(_adjMummyDir).toLowerCase() + " wall, slow and heavy, a long wet shuffle and then a pause and then again. It doesn't sound like it's in any kind of hurry.")>>
<</if>>
<<set _mumHere to (_room.mummy and not _room.mummyResolved)>>
<<set _mumKin to (_mumHere and setup.mummyReadsYouAs() eq "kin")>>
<<if _mumKin>>
<div class="slime-block is-passive">
<div class="slime-block-row">
<div class="slime-block-frame"><img @src="setup.pickMedia('mummy_idle')" alt="mummy"></div>
<div class="slime-block-text">
<div class="slime-block-title">IT DOES NOT CARE</div>
<div class="slime-block-desc">One of them is stood in the corner of this room, close enough to touch, and it doesn't do anything about you. Its head comes round as you cross the floor and follows you most of the way, and then it loses interest. You're wound in the same cloth it is, and whatever it uses instead of eyes cannot tell the difference. You can hear it breathing. It shouldn't be able to.</div>
</div>
</div>
<div class="slime-block-links">
<<if setup.linenStackFull()>>
<div class="ship-action is-spent">
<span class="action-label">Work a length of linen off it</span><span class="action-hint">You're already carrying all the cloth you can hold.</span>
</div>
<<else>>
<div class="ship-action slime-link">
<<link '<span class="action-label">Work a length of linen off it</span><span class="action-hint">Goes in your bag. If it notices, it stops being furniture.</span>'>>
<<run setup.mummyStripQte(_room.id)>>
<</link>>
</div>
<</if>>
</div>
</div>
<</if>>
<<if setup.mummyDownHere(_room)>>
<div class="room-hint fi0">One of them is face down in the grit where the stone left her, not moving much.</div>
<</if>>
<<if _room.servantNiche and not _room.servantNiche.looted>>
<<if _mumHere>>
<div class="ship-action is-spent">
<span class="action-label">A bricked-up doorway</span><span class="action-hint">Not while that's in the room with you.</span>
</div>
<<elseif setup.linenFull()>>
<div class="ship-action">
<<link '<span class="action-label">Put your hand flat on the bricks</span><span class="action-hint">It reads the cloth, not you.</span>'>>
<<set $nicheResult to setup.openServantNiche(_room.id)>>
<<goto "ServantHollow">>
<</link>>
</div>
<<else>>
<div class="ship-action is-spent">
<span class="action-label">A bricked-up doorway</span><span class="action-hint">Only opens for the dead.</span>
</div>
<</if>>
<</if>>
<<set _sarSpent to (_room.sarcophagus and (_room.sarcophagus.state eq "looted" or (_room.sarcophagus.state eq "open" and not _room.sarcophagus.loot)))>>
<<if _room.sarcophagus and not _sarSpent>>
<<set _sar to _room.sarcophagus>>
<div class="sarcophagus-panel">
<img class="sarc-bg" src="Images/ui/egyptian_wall.jpg" alt="" aria-hidden="true">
<div class="sarc-torch" aria-hidden="true"></div>
<<if _sar.state eq "sealed">>
<div class="sarcophagus-title">A SEALED COFFIN</div>
<div class="sarcophagus-desc">The lid is still on, sealed all the way around with hard black resin gone to stone. Whatever the tomb was built to hold down is in here, and everything they buried it with is in there underneath it. The only way to reach one is through the other.<<if _sar.tell eq "scratches">> Someone has been at the underside of that lid. The grooves run in fours, deep into the stone, and they're on the wrong side to have been cut by a mason.<<elseif _sar.tell eq "cold">> The resin is unbroken the whole way round and the stone under your palm is cold and dead and has been for a very long time.<</if>></div>
<div class="ship-actions">
<<if _mumHere>>
<div class="ship-action is-spent">
<span class="action-label">Break the seal and open it</span><span class="action-hint">Not with that stood in the corner watching you do it.</span>
</div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Break the seal and open it</span><span class="action-hint">Take the loot. Wake whatever sleeps.</span>'>>
<<if _sar.hasMummy>>
<<run setup.openCoffinQte(_room.id)>>
<<else>>
<<run setup.openSarcophagusNow(_room.id)>>
<<goto "PyramidInterior">>
<</if>>
<</link>>
</div>
<</if>>
</div>
<<elseif _sar.state eq "open">>
<div class="sarcophagus-title">AN OPEN COFFIN</div>
<div class="sarcophagus-desc">The lid has been shoved off and lies cracked on the floor.<<if _sar.loot>> There's still something tucked into the wrappings down inside.<<else>> Whatever was worth taking is long gone. Just dust and old linen now.<</if>></div>
<<if _sar.loot>>
<div class="room-loot">
<<print setup.lootCap(_sar.loot.name)>><img class="loot-icon" @src="'Images/items/' + _sar.loot.id + '.png'" alt=""><span class="loot-name"><<print _sar.loot.name>></span> <<print setup.nameVerb(_sar.loot.name, "sits", "sit")>> in the bottom of the coffin. It would go for around <<creditChip _sar.loot.value>> cashed in at the station.<br>
<<if not setup.cargoCanTake(_sar.loot.id)>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something on the ship first"><<print setup.nameVerb(_sar.loot.name, "Pick it up", "Pick them up")>></span>
<<else>>
<<link `setup.nameVerb(_sar.loot.name, "Take it", "Take them")`>>
<<run setup.addCargo(_sar.loot)>>
<<set _room.sarcophagus.loot to null>>
<<set _room.sarcophagus.state to "looted">>
<<tick 4>>
<<goto "PyramidInterior">>
<</link>>
<</if>>
</div>
<</if>>
<<elseif _sar.state eq "resealed">>
<div class="sarcophagus-title">A COFFIN YOU PUT BACK</div>
<div class="sarcophagus-desc">The lid sits crooked where you dropped it and the resin seal is broken all the way round, but it's down, and it's staying down. Every so often the stone shifts a little against the lip. You aren't opening this one twice.</div>
<</if>>
</div>
<</if>>
<<if _room.boulderTrap and not _room.boulderPassed>>
<<done>><<run setup.mountRoomBoulders()>><</done>>
<<if not _room.boulderToldYou>>
<<set _room.boulderToldYou to true>>
<<run setup.showUseToast(setup.boulderRoomHint(), { dwell: 4200 })>>
<</if>>
<</if>>
<<if _room.glyphs and _room.glyphs.length>>
<<done>><<run setup.mountRoomGlyphs()>><</done>>
<<if _room.glyphs.some(function(g){ return g.key; })>>
<</if>>
<</if>>
<<if _room.glyphDoor and not _room.glyphDoor.open>>
<div class="ship-action">
<<link '<span class="action-label">The sealed door</span><span class="action-hint">Three sockets cut beside it</span>'>>
<<run setup.openGlyphDoor({ onOpen: function(){ Engine.play('PyramidInterior'); } })>>
<</link>>
</div>
<</if>>
<<if _room.minShrine>>
<div class="room-loot">
Something is sticking out of the wall.<br>
<<link "Pick it up">><<goto "GloryWall">><</link>>
</div>
<</if>>
<<if _room.gloryDrop>>
<div class="room-loot">
<<print setup.lootLede(_room.gloryDrop.name)>> <img class="loot-icon" @src="'Images/items/' + _room.gloryDrop.id + '.png'" alt=""><span class="loot-name"><<print _room.gloryDrop.name>></span> <<print _room.gloryDrop.spot>>. Worth about <<creditChip _room.gloryDrop.value>> cashed in at the station.<br>
<<if not setup.cargoCanTake(_room.gloryDrop.id)>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something on the ship first"><<print setup.nameVerb(_room.gloryDrop.name, "Pick it up", "Pick them up")>></span>
<<else>>
<<link `setup.nameVerb(_room.gloryDrop.name, "Pick it up", "Pick them up")`>>
<<run setup.addCargo(_room.gloryDrop)>>
<<set _room.gloryDrop to null>>
<<tick 4>>
<<goto "PyramidInterior">>
<</link>>
<</if>>
</div>
<</if>>
<<if _room.loot and not _room.looted>>
<div class="room-loot">
<<print setup.lootLede(_room.loot.name)>> <img class="loot-icon" @src="'Images/items/' + _room.loot.id + '.png'" alt=""><span class="loot-name"><<print _room.loot.name>></span> <<print _room.loot.spot>>. Worth about <<creditChip _room.loot.value>> cashed in at the station.<br>
<<if not setup.cargoCanTake(_room.loot.id)>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something on the ship first"><<print setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")>></span>
<<else>>
<<link `setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")`>>
<<run setup.addCargo(_room.loot)>>
<<set _room.looted to true>>
<<tick 4>>
<<goto "PyramidInterior">>
<</link>>
<</if>>
</div>
<</if>>
<div class="ship-actions">
<<if setup.companionCaughtHere()>>
<<print setup.companionCaughtBlockHtml()>>
<<elseif setup.companionKoHere()>>
<<print setup.companionKoBlockHtml()>>
<</if>>
<<if _room.id eq "r0">>
<div class="ship-action dir-exit">
<<link '<span class="action-label">Back out into the sun</span><span class="action-hint">Leave the tomb</span>'>>
<<set $planet.location to "outdoor">>
<<run setup.stopAmbient('base')>>
<<run setup.playSound('door_open', { volume: 0.5 })>>
<<tick 3>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
<<set _exitList to setup.sortedExits(_map, _room.id)>>
<<set _bldBlock to (_room.boulderTrap and not _room.boulderPassed)>>
<<for _i, _ex range _exitList>>
<<capture _ex>>
<<set _exRoom to _map.rooms[_ex.targetId]>>
<<set _exTd to setup.INDOOR_TYPES[_exRoom.type]>>
<<set _dirClass to 'ship-action'>>
<<if _exRoom.id eq 'r0'>><<set _dirClass += ' dir-start'>>
<<elseif _exRoom.isExit>><<set _dirClass += ' dir-exit'>>
<<elseif not _exRoom.visited>><<set _dirClass += ' dir-unknown'>>
<</if>>
<<if _bldBlock and _ex.dir eq _room.boulderDir>>
<div @class="_dirClass">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_ex.dir)>></span> Cross to the <<print setup.dirLabel(_ex.dir).toLowerCase()>></span><span class="action-hint">Through the swing</span>'>>
<<run setup.openBoulderOverlay({
onPass: function(){ var m=State.variables.planet.indoor; var hall=m.current;
m.rooms[hall].boulderPassed = true;
var caught = setup.boulderCatchMummy(m, hall);
m.previousRoom=hall; m.current=_ex.targetId; m.rooms[_ex.targetId].visited=true;
setup.advanceMinutes(setup.moveMinutes(8));
setup.tickPyramidMummies(m); setup.tickHydration(true);
if (caught) setup.showUseToast('The chain catches her across the shoulder on the backswing and takes her off her feet. She goes down in a heap of old cloth and stays there.', { dwell: 4200 });
Engine.play('PyramidInterior'); },
onHit: function(){ State.variables.boulderKO = null; Engine.play('BoulderKO'); },
onLeave:function(){ Engine.play('PyramidInterior'); }
})>>
<</link>>
</div>
<<else>>
<div @class="_dirClass">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_ex.dir)>></span> <<print setup.dirLabel(_ex.dir)>></span><span class="action-hint"><<print _exTd.name>></span>'>>
<<run setup.playSound('step_gravel', { volume: 0.45 })>>
<<set $planet.indoor.previousRoom to $planet.indoor.current>>
<<set $planet.indoor.current to _ex.targetId>>
<<set setup._distMapCache to null>>
<<run setup.tickPyramidMummies($planet.indoor)>>
<<run setup.tickHydration(true)>>
<<tick `setup.moveMinutes(8)`>>
<<goto "PyramidInterior">>
<</link>>
</div>
<</if>>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
<<set _gwRoom to $planet and $planet.indoor and $planet.indoor.rooms[$planet.indoor.current]>>
<<if not _gwRoom or not _gwRoom.minShrine>>
<<goto "PyramidInterior">>
<<else>>
<<run setup.gloryLockRead()>>
<<set _gwOpts to setup.gloryOptions()>>
<div class="npc-scene">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('gh_intro'))>></div>
<p class="action-narration">You crouch to get a hand round it and it's warm before you've even touched it. Not sun warm. Body warm. That pale thing was never an object at all, it's the head of a cock pushed through a slot cut clean through the false door, and it swells the second you're close enough to breathe on it.</p>
<p class="action-narration is-tense">There's no room behind that wall. You checked the map on the way in.</p>
<p class="action-narration"><<print setup.gloryTell()>></p>
<p class="action-narration is-cold">It isn't going back in empty.</p>
<<for _gwI to 0; _gwI lt _gwOpts.length; _gwI++>>
<<set _gwO to _gwOpts[_gwI]>>
<<capture _gwO>>
<<if _gwO.blocked>>
<div class="scene-advance is-off"><span><<print _gwO.label>> <span class="dim">(<<print _gwO.why>>)</span></span></div>
<<else>>
<div class="scene-advance"><<link _gwO.label>><<set $gloryPick to _gwO.id>><<goto "GloryWallAct">><</link>></div>
<</if>>
<</capture>>
<</for>>
<div class="scene-advance"><<link "Back away from the wall">><<goto "PyramidInterior">><</link>></div>
</div>
<</if>>
<<set _gwR to setup.gloryResolve($gloryPick)>>
<<if not _gwR>>
<<goto "PyramidInterior">>
<<else>>
<div class="npc-scene">
<div class="npc-scene-media"><<print setup.mediaTag(_gwR.media)>></div>
<<print setup.gloryActProse(_gwR)>>
<div class="scene-advance"><<link "Get up and wipe your face">><<goto "PyramidInterior">><</link>></div>
</div>
<</if>><<if not $mummyScene or not $planet or not $planet.indoor>>
<<goto "PyramidInterior">>
<<else>>
<<set _pg to ($body and $body.gender) or "male">>
<<set _roomId to $mummyScene.roomId>>
<div class="bee-aggro-root is-mummy">
<div class="bee-aggro-title">IT IS AWAKE</div>
<<if $mummyScene.phase eq "greet">>
<<if not $mummyScene.media>><<set $mummyScene.media to setup.mummyLossMedia()>><</if>>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia('mummy_idle'))>>
</div>
<div class="scene-prose">
It comes out of the dark the same way they all do and it gets a hand on you the same way too, and then it stops. The head tips over. There's nothing under the wrapping where its eyes should be and it's still very obviously looking, and what it's actually doing is going over you with both hands, slow, thorough, the way you would check fruit.
It finds what it was looking for. You feel the exact second it does, because the grip changes, and it isn't holding you still anymore, it's holding you up.
</div>
</div>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Let it have what it found</span><span class="action-hint">It isn't fighting you. Whatever this is, it isn't that.</span>'>>
<<set _gr to setup.mummyGreetOutcome($mummyScene.roomId)>>
<<set $mummyScene.linenTook to _gr.linenTook>>
<<set $mummyScene.phase to "greeted">>
<<goto "MummyEncounter">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Take your arm back and go</span><span class="action-hint">It hasn't tried to stop you yet.</span>'>>
<<run setup.playSound('step_gravel', { volume: 0.6 })>>
<<run setup.mummyDisplaceFrom($planet.indoor, $mummyScene.roomId)>>
<<set $mummyScene to null>>
<<run setup.showUseToast("You pull your arm out of its hands and it lets you, and it stays where it is with both palms still open in the air where you were. It does not follow.", { dwell: 4200 })>>
<<goto "PyramidInterior">>
<</link>>
</div>
</div>
<<elseif $mummyScene.phase eq "greeted">>
<<if not $mummyScene.media>><<set $mummyScene.media to setup.mummyLossMedia()>><</if>>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag($mummyScene.media.path)>>
</div>
<div class="scene-prose">
<<switch $mummyScene.media.act>>
<<case "vaginal">>
It takes its time and it isn't rough about any of it, and that's the part that gets you, because a thing with no face and no eyes and no reason to care is being careful with you. It goes slow the whole way and it doesn't stop when you do.
<<case "anal">>
It turns you around by the hips like it has all the time anybody has ever had and works into you slowly enough that you hear yourself agreeing to it somewhere in the middle. It holds you up the entire time. You don't have to do anything.
<<case "oral">>
It brings you down onto your knees with a hand at the back of your neck that isn't holding you down so much as holding you still, and it works your mouth at its own pace, and it keeps your hair off your face while it does. That last part stays with you.
<<case "ridden">>
It settles down onto you and takes what it found with the unhurried certainty of something that has waited an extremely long time to find one in this good a condition. You're on the floor of a tomb and you aren't having a bad time and you'll be thinking about that later.
<<default>>
It keeps its hands on what it liked and works you through the cloth, slow and even, right up until you're the one making all the noise in the room.
<</switch>>
When it's done it doesn't shove you off. It gets you sat up against the wall, and it works a long strip of wrapping off its own forearm and winds it once around yours and tucks the end under, the way you'd give somebody a coat.
</div>
</div>
<<if $mummyScene.linenTook>>
<p class="action-narration">Grave Linen. Off its own arm, still warm, and there's a use for that down here.</p>
<<else>>
<p class="action-narration is-cold">There's no room in your bag for it. It leaves the strip laid across your knees anyway.</p>
<</if>>
<p class="action-narration is-tense">It shambles off without looking back. It was never going to hurt you.</p>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get your legs back</span>'>><<set $mummyScene to null>><<goto "PyramidInterior">><</link>>
</div>
<<elseif $mummyScene.phase eq "tore">>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia('mummy_idle'))>>
</div>
<div class="scene-prose">
You get a heel into something solid and rip your arm back out through its fingers, and what comes away with you is a long grey length of the stuff it's made of, unwinding off its forearm as you go. It doesn't chase. It stands there with one arm slowly coming undone and its head turned to follow a sound you aren't making anymore, and then it goes back to walking the way it was walking before.
You're still holding the cloth. It's dry and heavy and it's already going cold.
</div>
</div>
<<if $mummyScene.lines and $mummyScene.lines.length>>
<div class="bee-aftermath-narration">
<<for _mlL range $mummyScene.lines>>
<p @class="'aftermath-line aftermath-' + _mlL.type"><<print _mlL.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<if $mummyScene.collapse>>
<<link '<span class="action-label">Try to crawl out</span>'>><<goto "MummyCollapse">><</link>>
<<else>>
<<link '<span class="action-label">Put a wall between you and it</span>'>><<set $mummyScene to null>><<goto "PyramidInterior">><</link>>
<</if>>
</div>
<<elseif $mummyScene.phase eq "marked">>
<<set _mwHeavy2 to ($body.gender eq "female") or (($body.chest or 0) gte 3)>>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia(_mwHeavy2 ? 'mummy_wrapping' : 'mummy_idle'))>>
</div>
<div class="scene-prose">
You get loose, but not cleanly and not fast, and it keeps a grip on you right through the part where you're still working out which way is out. By the time your arm comes free it has had one hand holding you and the other working between your legs.
<<print setup.bindingProse($mummyScene.bound)>>
</div>
</div>
<<if $mummyScene.lines and $mummyScene.lines.length>>
<div class="bee-aftermath-narration">
<<for _mlL range $mummyScene.lines>>
<p @class="'aftermath-line aftermath-' + _mlL.type"><<print _mlL.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<if $mummyScene.collapse>>
<<link '<span class="action-label">Try to crawl out</span>'>><<goto "MummyCollapse">><</link>>
<<else>>
<<link '<span class="action-label">Get out of the room</span>'>><<set $mummyScene to null>><<goto "PyramidInterior">><</link>>
<</if>>
</div>
<<else>>
<<if not $mummyScene.media>><<set $mummyScene.media to setup.mummyLossMedia()>><</if>>
<<set _tkWrapped to ($mummyScene.bound and $mummyScene.bound.length and (($body.gender eq "female") or (($body.chest or 0) gte 3)))>>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag($mummyScene.media.path)>>
<<if _tkWrapped>><<print setup.mediaTag(setup.pickMedia('mummy_wrapped'))>><</if>>
</div>
<div class="scene-prose">
<<if $mummyScene.fought>>
You fight it the whole way and it doesn't matter. The wrappings get your other arm and then your legs and it puts you exactly where it wants you, and what it does next it does slow, like it's got nowhere else to be and now neither do you.
<<else>>
You stop fighting and let the linen take your weight, and it goes easier on your body for it, not gentler, just slower, working you over like it's done this longer than your whole bloodline's been alive.
<</if>>
<<switch $mummyScene.media.act>>
<<case "vaginal">>
It gets your knees apart with two turns of cloth and puts itself in you without any part of that being a question, and it's cold going in and it doesn't warm up. By the time the linen goes slack you're wrung out and leaking and your legs don't want to hold you.
<<case "anal">>
It turns you over with a fistful of wrapping at the back of your neck and takes the only way into you that it wants, at the same unhurried pace it does everything else. You're still shaking when it finishes and lets your hips drop.
<<case "oral">>
It winds a hand into your hair and holds your head where it wants it and uses your mouth like the rest of you isn't there, and you learn to breathe on its schedule or not at all. You're wearing most of it by the end.
<<case "ridden">>
It settles its weight down onto you and rides you with the patience of something that has nowhere to be for another thousand years, and it keeps going after you finish, and after that too.
<<default>>
There's nothing on you it can get into, so it works you through the cloth instead, one strip drawn tight and dragged slow and steady until your whole body is arguing with you, and it keeps at it long past the point you stop being able to keep quiet.
<</switch>>
<<if $mummyScene.bound and $mummyScene.bound.length>>And it isn't finished when it's finished. It works a length of its own wrapping off its arm without ever letting go of you and winds it on where it wants it, slow and exact, tucking the end under itself so there's nothing to get a nail behind. The cloth is cold and dry and it grips like it was measured for you.<<print setup.bindingProse($mummyScene.bound)>><</if>>
</div>
</div>
<<if $mummyScene.lines and $mummyScene.lines.length>>
<div class="bee-aftermath-narration">
<<for _mlL range $mummyScene.lines>>
<p @class="'aftermath-line aftermath-' + _mlL.type"><<print _mlL.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<if $mummyScene.collapse>>
<<link '<span class="action-label">Try to crawl away</span>'>><<goto "MummyCollapse">><</link>>
<<else>>
<<link '<span class="action-label">Drag yourself up</span>'>><<set $mummyScene to null>><<goto "PyramidInterior">><</link>>
<</if>>
</div>
<</if>>
</div>
<</if>>
<<if not $planet or not $planet.indoor>>
<<goto "PlanetSurface">>
<<else>>
<<if not $boulderKO or not $boulderKO.resolved>>
<<set $boulderKO to setup.boulderKOResolve()>>
<</if>>
<div class="bee-aggro-root is-mummy">
<div class="bee-aggro-title">HALF A SECOND LATE</div>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<if $boulderKO.media>>
<<print setup.mediaTag($boulderKO.media)>>
<<else>>
<<roomImage "pillared_hall">>
<</if>>
</div>
<div class="scene-prose">
You read the swing wrong by about half a second and the stone takes you across the shoulder and the side of the head, and the hall turns over. There's no pain worth the name, just the floor arriving and a long ringing note and the ceiling going a long way away from you.
<<if $boulderKO.used>>
You aren't alone down here for all of it. Something finds you face down in the grit with your bag open beside you and no fight left in you to give it, and it takes its time, because there's nothing about you that's going to stop it and it has nowhere else to be. You come round to the sound of it walking away, and to the state you have been left in.
<<else>>
Nothing comes. You lie there in the dust in the dark for however long it takes. The tomb does nothing about you at all.
<</if>>
</div>
</div>
<<if $boulderKO.lines and $boulderKO.lines.length>>
<div class="bee-aftermath-narration">
<<for _bkL range $boulderKO.lines>>
<p @class="'aftermath-line aftermath-' + _bkL.type"><<print _bkL.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get your feet under you</span>'>><<set $boulderKO to null>><<goto "PyramidInterior">><</link>>
</div>
</div>
<</if>><<if not $planet or not $planet.indoor>>
<<goto "PlanetSurface">>
<<else>>
<<set _shHeavy to ($body.gender eq "female") or (($body.chest or 0) gte 3)>>
<div class="bee-aggro-root is-mummy">
<div class="bee-aggro-title">THE SERVANTS' HOLLOW</div>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia(_shHeavy ? 'mummy_coffin_tits' : 'mummy_coffin_flat'))>>
</div>
<div class="scene-prose">
The wall reads whatever it's you're wearing and the bricks let go of each other, and a slab of it turns inward on nothing you can see and stops, and there's a room back there that no one has stood in since it was closed.
They're all still in it. Nine of them, standing upright in holes cut to fit them, wound the same way you're wound, arms crossed the same way, and every one of them was walled in here breathing because somebody upstairs was going to need staff. What they were sent over with is stacked at their feet in the dust, and nobody ever came back for any of it.
<<if $nicheResult and $nicheResult.got and $nicheResult.got.length>>
You work it off the floor in front of them a piece at a time, and not one of them moves while you do it, and you keep waiting for that to change. Whatever the cloth is telling this room about you, it's still telling it.
<</if>>
</div>
</div>
<<if $nicheResult and $nicheResult.got and $nicheResult.got.length>>
<<set $mummyLines to []>>
<<run $mummyLines.push({ type:'reward', text:'You come out with ' + $nicheResult.got.length + ' ' + ($nicheResult.got.length === 1 ? 'piece' : 'pieces') + ': ' + $nicheResult.got.map(function(i){ return i.name; }).join(', ') + '.' })>>
<<if $nicheResult.left and $nicheResult.left gt 0>>
<<run $mummyLines.push({ type:'gear', text:'There is more of it than you can carry. What is left stays on the stone.' })>>
<</if>>
<<run $mummyLines.push({ type:'fatigue', text:'Your bag is heavy with their things now, and the wrap you are stood in was only ever working because it was not.' })>>
<<if $mummyLines and $mummyLines.length>>
<div class="bee-aftermath-narration">
<<for _mlX range $mummyLines>>
<p @class="'aftermath-line aftermath-' + _mlX.type"><<print _mlX.text>></p>
<</for>>
</div>
<</if>>
<<else>>
<<set $mummyLines to [{ type:'gear', text:'There is nothing left down here worth the walk. Somebody got to it first, a very long time ago.' }]>>
<<if $mummyLines and $mummyLines.length>>
<div class="bee-aftermath-narration">
<<for _mlX range $mummyLines>>
<p @class="'aftermath-line aftermath-' + _mlX.type"><<print _mlX.text>></p>
<</for>>
</div>
<</if>>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Back out through the wall</span>'>><<set $nicheResult to null>><<set $mummyLines to null>><<goto "PyramidInterior">><</link>>
</div>
</div>
<</if>><<if not $planet or not $planet.indoor>>
<<goto "PlanetSurface">>
<<else>>
<<set _lcHeavy to ($body.gender eq "female") or (($body.chest or 0) gte 3)>>
<<if not $body.linenCollapsed>>
<<set $body.linenCollapsed to true>>
<<run setup.mummyCollapseToEntrance()>>
<<run setup.clearBindings()>>
<<set $body.linen to null>>
<<run setup.playSound('monster_roar', { volume: 0.45 })>>
<</if>>
<div class="bee-aggro-root is-mummy">
<div class="bee-aggro-title">YOU GO DOWN IN IT</div>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia(_lcHeavy ? 'mummy_wrap_tease' : 'mummy_idle'))>>
</div>
<div class="scene-prose">
It has been building the whole way and you have been telling yourself you had another room in you, and somewhere between one doorway and the next that stops being true. You get a hand on the wall and then you get the other one on it too.
The cloth doesn't do anything different. That's the part you keep coming back to afterwards. It's wound exactly the way you wound it and it stays exactly that tight, and your own body works itself apart inside it while you stand there trying to be quiet about it, because you did this, you picked it up off a floor and you put it on. Your knees go somewhere around the middle. You're still wrapped when the dark comes up.
You come to face down at the mouth of the tomb with daylight a few feet off and the linen gone to grey powder all down your front, and your bag open beside you with a good deal less in it than you remember packing.
</div>
</div>
<<set $mummyLines to [
{ type:'gear', text:'Whatever found you down there took its cut. Your bag came back a good deal lighter than it went in.' },
{ type:'body', text:'You\'re wrung out and shaking and none of it has worn off yet.' },
{ type:'fatigue', text:'You lost most of what was left of the day on that floor.' }
]>>
<<if $mummyLines and $mummyLines.length>>
<div class="bee-aftermath-narration">
<<for _mlX range $mummyLines>>
<p @class="'aftermath-line aftermath-' + _mlX.type"><<print _mlX.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get up off the floor</span>'>><<set $body.linenCollapsed to false>><<set $mummyScene to null>><<set $mummyLines to null>><<goto "PyramidInterior">><</link>>
</div>
</div>
<</if>><<if not $planet or not $planet.indoor>>
<<goto "PlanetSurface">>
<<else>>
<<set _pg to ($body and $body.gender) or "male">>
<<if not $mummyScene or not $mummyScene.collapsed>>
<<run setup.mummyCollapseToEntrance()>>
<<if $mummyScene>><<set $mummyScene.collapsed to true>><</if>>
<<run setup.playSound('monster_roar', { volume: 0.5 })>>
<</if>>
<div class="bee-aggro-root is-mummy">
<div class="bee-aggro-title">YOU GO UNDER</div>
<div class="scene-beat is-mummy">
<div class="scene-media-wrap">
<<if _pg eq "female">>
<<print setup.mediaTag(setup.pickMedia('mummy_ko_f'))>>
<<else>>
<<print setup.mediaTag(setup.pickMedia('mummy_loss_male'))>>
<</if>>
</div>
<div class="scene-prose">
There's nothing left in your legs and the thing wrapped around you knows it. You stop being able to fight somewhere in the middle and it just keeps going, in no hurry at all, until the dark behind your eyes takes the rest. When you come to you're face down at the mouth of the tomb with daylight a few feet off and your bag torn half open beside you. Half your haul went back into the dark with whatever dragged you this far and then lost interest in you.
</div>
</div>
<<set $mummyLines to [
{ type:'gear', text:'A good chunk of what you came up out of there with went back into the dark with it.' },
{ type:'fatigue', text:'You lost most of the day on that floor and you\'re running on nothing.' }
]>>
<<if $mummyLines and $mummyLines.length>>
<div class="bee-aftermath-narration">
<<for _mlX range $mummyLines>>
<p @class="'aftermath-line aftermath-' + _mlX.type"><<print _mlX.text>></p>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get up off the floor</span>'>><<set $mummyScene to null>><<set $mummyLines to null>><<goto "PyramidInterior">><</link>>
</div>
</div>
<</if>>
<<if not $planet or not $planet.indoor or not setup.anubisRoomId()>>
<<goto "PyramidInterior">>
<<else>>
<<run setup.setAmbient('base', 'Sounds/ambient/facility_dark.mp3', { volume: 0.4 })>>
<<run setup.stopAmbient('encounter')>>
<<if not $anubisScene>><<set $anubisScene to { phase: "weigh" }>><</if>>
<<if not $anubisScene.greeted>>
<<set $anubisScene.greeted to true>>
<<done>>
<<run setup.openAnubisOverlay({
onDecline: function() {
if (typeof setup.anubisLeaveRoom === 'function') setup.anubisLeaveRoom();
Engine.play('PyramidInterior');
}
})>>
<</done>>
<</if>>
<<set _ajRoom to $planet.indoor.rooms[setup.anubisRoomId()]>>
<<roomImage "anubis_hall">>
<div class="room-header">$planet.name — The Tomb — <<print setup.getRoomTypeData(_ajRoom).name>></div>
<<print setup.renderMiniMap($planet.indoor)>>
<div class="room-desc">
The jackal's already at the scales when you come in, head turned down at you, taller than the door you came through. One pan holds a single white feather. The other's empty, waiting on you.
</div>
<div class="ship-actions">
<<for _ajI, _ajEx range setup.sortedExits($planet.indoor, _ajRoom.id)>>
<<capture _ajEx>>
<<set _ajTo to $planet.indoor.rooms[_ajEx.targetId]>>
<<set _ajTd to setup.INDOOR_TYPES[_ajTo.type]>>
<div @class="'ship-action' + (_ajTo.visited ? '' : ' dir-unknown')">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_ajEx.dir)>></span> <<print setup.dirLabel(_ajEx.dir)>></span><span class="action-hint"><<print _ajTd.name>></span>'>>
<<set $anubisScene to null>>
<<set $planet.indoor.previousRoom to $planet.indoor.current>>
<<set $planet.indoor.current to _ajEx.targetId>>
<<run setup.playSound('step_gravel', { volume: 0.4 })>>
<<run setup.advanceMinutes(setup.moveMinutes(8))>>
<<run setup.tickPyramidMummies($planet.indoor)>>
<<run setup.tickHydration(true)>>
<<goto "PyramidInterior">>
<</link>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<<if not $anubisScene or $anubisScene.mode neq "offer">>
<<goto "PyramidInterior">>
<<else>>
<<set _o to $anubisScene.offer>>
<<set _r to $anubisScene.res>>
<<set _pg to ($body and $body.gender) or "male">>
<div class="bee-aggro-root is-anubis">
<div class="bee-aggro-title"><<if $anubisScene.verdict eq "light">>JUDGED WORTHY<<else>>A DEBT SETTLED<</if>></div>
<div class="scene-beat is-anubis">
<<if _o eq "fortune">>
<div class="scene-prose">
He drags the boxes out from behind the scales one at a time and lines them up on the stone in front of you, and then he steps back and waits with his hands behind him like a man who has done this before and enjoys the part where you decide.
</div>
<<if _r.chest>>
<p class="action-narration"><<print _r.chest.name>>, out of the one you picked.<<if not _r.took>> Your bag was full, so it goes back down on the stone where you can come back for it.<</if>></p>
<</if>>
<<elseif _o eq "cleanse">>
<div class="scene-prose">
He tips your chin up with one claw and pours, and it's cold and it keeps coming, and everything the tomb put on you goes off you and runs away across the stone. He works it into your hair. He does your hands last, one finger at a time, and he takes his time because he isn't in a hurry for you to leave.
</div>
<<elseif _o eq "enjoy">>
<div class="scene-media-wrap"><<print setup.mediaTag(_r.media)>></div>
<div class="scene-prose">
<<if _r.served>>He puts you back against the cold foot of his own scales and goes down on his knees in front of you, and a god's mouth is a god's mouth. He takes his time over it. Nobody has let him do this in a very long while.
<<else>>He lies down on the floor of his own hall and puts his hands up by his head, and the god who has been weighing the dead since before the company had a name lets you have him because you passed and because he wants it. He's loud. He's been alone a long time.
<</if>>
</div>
<<elseif _o eq "paygold">>
<div class="scene-prose">
You stack it onto the empty pan, piece by piece, until the gold outweighs the feather and he's satisfied.<<if _r.paid>> Around <<print _r.paid>> credits of your haul, gone onto his scale.<</if>> He doesn't gloat. He just looks a bit sorry about it, and steps aside.
</div>
<<elseif _o eq "taken">>
<div class="scene-media-wrap"><<print setup.mediaTag(_r.media)>></div>
<div class="scene-prose">
You've got no gold he wants and a heart too heavy to wash, and when you open your mouth to say so he's already decided. <<if _r.pulled>>He hooks the plug out of you with one claw and drops it on the stone beside your bag, unhurried. <</if>>He takes it out of you under his own scales because there was nothing else on you to take.
</div>
<<elseif _o eq "paybody">>
<div class="scene-media-wrap"><<print setup.mediaTag(_r.media)>></div>
<div class="scene-prose">
<<if _r.serve>>You keep the haul and settle it with your chest instead, down on the stone with him in your cleavage and both hands holding you there until he's had what he came to the scales for. It isn't a pass he gives. It's one you bought.
<<else>>You keep the haul and pay the other way, and he takes it out of you under his own scales without hurrying. It isn't a punishment and he never pretends it is. It's the bill.
<</if>>
</div>
<<else>>
<div class="scene-prose">
You ask instead of paying, and he goes quiet for a moment, and then he does it anyway. Cold water, over and over, until the weight comes off you and runs away across the floor. When it's done he walks you back to the door himself and stands in it. The prize stays behind him in the dark.
</div>
<</if>>
</div>
<<if _r.lines and _r.lines.length>>
<div class="bee-aftermath-narration">
<<for _lI, _ln range _r.lines>>
<<print '<p class="aftermath-line aftermath-' + _ln.type + '">' + _ln.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label"><<if _o eq "begwash">>Walk back up<<else>>Go claim the prize<</if>></span>'>>
<<set $anubisScene to null>>
<<goto "PyramidInterior">>
<</link>>
</div>
</div>
<</if>><<if not $planet or not $planet.den>>
<<goto "PlanetSurface">>
<<else>>
<<set _map to $planet.den>>
<<run setup.setAmbient('base', 'Sounds/ambient/deathclaw_sleep.mp3', { volume: 0.40, fadeInMs: 1400 })>>
<<run setup.promoteGrowingSlimes(_map)>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<run setup.setAmbient('base', 'Sounds/ambient/outdoor_scary.mp3', { volume: 0.42 })>>
<<run setup.stopAmbient('encounter')>>
<<set _dnHoardHero to (not (_room.slime and not _room.slimeResolved)) and _room.hoardChamber and not _room.deathclawResolved>>
<<if not _dnHoardHero>><<roomImage `_room.img ? _room.img : _room.type`>><</if>>
<div class="ship-header">SPHINXTER-42 — THE DEN</div>
<<print setup.renderMiniMap(_map)>>
<<set _dc to setup.dcEnsure(_map)>>
<<if _dc.chase and not _room.deathclawResolved>>
<div class="bee-banner dc-chase">
<div class="bee-banner-label">IT IS BEHIND YOU</div>
<div class="bee-countdown" id="dc-countdown"><<print Math.max(0, _dc.secondsLeft or 0)>></div>
<div class="bee-banner-sub">MOVE. THE MOUTH OF THE DEN IS THE ONLY WAY OUT.</div>
</div>
<<repeat 1s>>
<<set _tkMap to $planet.den>>
<<if not _tkMap or not _tkMap.dc or not _tkMap.dc.chase>>
<<stop>>
<<else>>
<<set _tkRes to setup.dcChaseTick(_tkMap)>>
<<if _tkRes eq "caught">>
<<run setup.deathclawStartRut(_tkMap.current, true)>>
<<goto "DeathclawRut">>
<<else>>
<<replace "#dc-countdown">><<print Math.max(0, _tkMap.dc.secondsLeft)>><</replace>>
<</if>>
<</if>>
<</repeat>>
<<elseif _dc.awake and not _room.deathclawResolved>>
<<set _dcProx to setup.dcProximityLabel(_map)>>
<div class="bee-banner dc-stalk">
<div class="bee-banner-label">IT IS AWAKE</div>
<div class="bee-banner-sub"><<print _dcProx.text>> · <<print setup.dcScentLabel(_map)>></div>
</div>
<</if>>
<<if _room.slime and not _room.slimeResolved>>
<<slimeEncounter>>
<<elseif _room.hoardChamber and not _room.deathclawResolved>>
<<set _room.sleepImg to _room.sleepImg or setup.pickMedia('deathclaw_sleeping')>>
<<set _hoardLeft to (_room.hoard ? _room.hoard.length : 0)>>
<<if not $deathclawRob>><<set $deathclawRob to { active: true, grabs: 0 }>><</if>>
<<if $deathclawRob and $deathclawRob.active>>
<<set _robChance to Math.round(setup.deathclawRobChance() * 100)>>
<<set _robCls to (_robChance lt 20) ? 'is-low' : ((_robChance lt 40) ? 'is-mid' : ((_robChance lt 60) ? 'is-high' : 'is-critical'))>>
<<set _robPanelCls to 'rob-panel is-overlay ' + _robCls>>
<<set _robStyle to 'width:' + _robChance + '%;'>>
<div class="room-desc">
It's curled around them with that huge chest going up and down slow, close enough that the heat coming off it dries your eyes. The boxes sit right under its arm, brass and old wood and the gear of everyone who came down here before you and didn't leave. You get one hand on one lid at a time and no way of knowing which ones are full.
</div>
<div class="den-hoard-frame">
<div class="scene-media-wrap"><<print setup.mediaTag(_room.sleepImg)>></div>
<div @class="_robPanelCls">
<div class="rob-risk-row"><span class="rob-risk-label">WAKE RISK</span><span class="rob-risk-read"><<print setup.deathclawRobRiskLabel()>></span></div>
<div class="rob-bar-wrap">
<div class="rob-risk-bar"><div class="rob-risk-fill" @style="_robStyle"></div></div>
<span class="rob-zzz" aria-hidden="true"><img src="Images/ui/sleep_zzz.png" alt=""><img src="Images/ui/sleep_zzz.png" alt=""><img src="Images/ui/sleep_zzz.png" alt=""></span>
</div>
<div class="rob-hint"><<set _chLeft to setup.denChestsLeft(_room)>><<if _chLeft gt 0>><<print _chLeft>> still shut. Not every one of them has something in it, and an empty lid makes noise.<<else>>Every box down here is open. Nothing left but it.<</if>></div>
</div>
</div>
<<if true>>
<<print setup.denChestRowHtml(_room)>>
<<if setup.cargoFull()>><div class="den-chest-lock">Your bag's full. Opening another one just makes noise you can't carry.</div><</if>>
<<timed 20ms>><<run setup.installDenChestClicks()>><</timed>>
<</if>>
<div class="ship-actions">
<div class="ship-action dir-start">
<<link '<span class="action-label">Slip back out of the chamber</span>'>>
<<run setup.deathclawRobSlipOut(_room.id)>>
<<tick 3>>
<<goto "DeathclawDen">>
<</link>>
</div>
</div>
<<else>>
<div class="room-desc">
It's down at the back of the chamber, curled around its own pile and dead asleep, the rut run out of it for now. That much muscle at rest still puts the hair up on your arms. The hoard is boxes, half a dozen of them dragged down here and stacked against its side with the brass still on them, and it never opened most of them to see what it was hauling. Close enough to reach if your hands are steady and your bag isn't packed so full you rattle.
</div>
<div class="scene-media-wrap"><<print setup.mediaTag(_room.sleepImg)>></div>
<div class="ship-actions">
<<if _hoardLeft gt 0>>
<div class="ship-action">
<<link '<span class="action-label">Rob the hoard</span><span class="action-hint">Lift it while it sleeps. Greed wakes it.</span>'>>
<<set $deathclawRob to { active: true, grabs: 0 }>>
<<goto "DeathclawDen">>
<</link>>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Back out slow</span><span class="action-hint">Leave it sleeping. Retreat.</span>'>>
<<if _map.previousRoom and _map.rooms[_map.previousRoom]>>
<<set _map.current to _map.previousRoom>>
<<else>>
<<set _map.current to "r0">>
<</if>>
<<goto "DeathclawDen">>
<</link>>
</div>
</div>
<</if>>
<<else>>
<div class="room-desc"><<print _room.desc>></div>
<<if not _dc.chase>>
<<if _room.loot and not _room.looted>>
<div class="room-loot">
<<print setup.lootLede(_room.loot.name)>> <img class="loot-icon" @src="'Images/items/' + _room.loot.id + '.png'" alt=""><span class="loot-name"><<print _room.loot.name>></span> <<print _room.loot.spot>>. Worth about <<creditChip _room.loot.value>> cashed in at the station.<br>
<<if not setup.cargoCanTake(_room.loot.id)>><span class="loot-grab is-disabled" title="Your cargo is full. Dump something first"><<print setup.nameVerb(_room.loot.name, "Take it", "Take them")>></span>
<<else>><<link `setup.nameVerb(_room.loot.name, "Take it", "Take them")`>><<run setup.addCargo(_room.loot)>><<set _room.looted to true>><<tick 3>><<goto "DeathclawDen">><</link>><</if>>
</div>
<</if>>
<<if _room.droppedItems and _room.droppedItems.length gt 0>>
<div class="room-loot dropped-list">
<span class="dropped-head">On the ground</span>
<<for _ddI, _ddItem range _room.droppedItems>>
<<capture _ddI, _ddItem>>
<div class="dropped-row">
<img class="loot-icon dropped-icon" @src="'Images/items/' + _ddItem.id + '.png'" alt="">
<span class="dropped-name"><<print _ddItem.name>></span>
<span class="dropped-val"><<creditChip _ddItem.value>></span>
<<if not setup.cargoFull()>>
<<link "pick up">><<run setup.pickUpDropped(_room.id, _ddI)>><<goto "DeathclawDen">><</link>>
<<else>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something first">pick up</span>
<</if>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
<div class="ship-actions">
<<set _dcFwd to (_dc.chase ? setup.dcForwardExits(_map, _room) : null)>>
<<if _dc.chase>>
<<for _fi, _fx range _dcFwd>>
<<capture _fx>>
<<set _ftgt to _map.rooms[_fx.id]>>
<div class="ship-action dc-run">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_fx.dir) + '</span> ' + setup.dirLabel(_fx.dir) + '</span><span class="action-hint">' + (_fx.id === _map.entrance ? "daylight" : (_dc.chase ? (_ftgt and _ftgt.visited ? "you know this one" : "blind") : (_ftgt and _ftgt.visited ? "you came through here" : "you never went this way"))) + '</span>'`>>
<<run setup.playSound('step_gravel', { volume: 0.7 })>>
<<set _cRes to setup.dcChaseStep(_map, _fx.id)>>
<<if _cRes eq "escaped">>
<<run setup.dcSealDen()>>
<<set $planet.location to "outdoor">>
<<set $useMessage to "You come up out of the hole into the white heat with your hands shaking, and it stops at the mouth. It does not follow you into the open. It just fills the dark behind you and watches until you are small, and that hole is shut to you now.">>
<<goto "PlanetSurface">>
<<else>>
<<run setup.deathclawStartRut(_map.current, true)>>
<<goto "DeathclawRut">>
<</if>>
<</link>>
</div>
<</capture>>
<</for>>
<<if _dc.from and _map.rooms[_dc.from]>>
<<set _dcBackDir to null>>
<<for _bd, _bid range _room.exits>>
<<if _bid === _dc.from>><<set _dcBackDir to _bd>><</if>>
<</for>>
<<if _dcBackDir>>
<div class="ship-action dc-back">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_dcBackDir) + '</span> ' + setup.dirLabel(_dcBackDir) + '</span><span class="action-hint">back into it. stop running</span>'`>>
<<run setup.playSound('monster_roar', { volume: 0.8 })>>
<<run setup.deathclawStartRut(_map.current, true)>>
<<goto "DeathclawRut">>
<</link>>
</div>
<</if>>
<</if>>
<<if _dcFwd.length eq 0>>
<div class="ship-action is-spent"><span class="action-label">There's no way on</span><span class="action-hint">Rock in front of you, and it's in the passage behind.</span></div>
<div class="ship-action">
<<link '<span class="action-label">Turn around</span><span class="action-hint">Nothing else left to do</span>'>>
<<run setup.deathclawStartRut(_map.current, true)>>
<<goto "DeathclawRut">>
<</link>>
</div>
<</if>>
<<else>>
<<for _exDir, _exTarget range _room.exits>>
<<capture _exDir, _exTarget>>
<<set _tgt to _map.rooms[_exTarget]>>
<div class="ship-action">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_exDir) + '</span> ' + setup.dirLabel(_exDir) + '</span><span class="action-hint">' + ((_tgt and _tgt.visited) ? "back through" : "deeper in") + '</span>'`>>
<<set _map.previousRoom to _map.current>>
<<set _map.current to _exTarget>>
<<run setup.tickHydration(true)>>
<<run setup.playSound('step_gravel', { volume: 0.45 })>>
<<run setup.dcTick(_map)>>
<<goto "DeathclawDen">>
<</link>>
</div>
<</capture>>
<</for>>
<</if>>
<<if _room.id eq "r0">>
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/cave_entrance.png" alt=""><span class="action-label">Climb back out</span><span class="action-hint">Up into the dunes</span>'>><<set $planet.location to "outdoor">><<goto "PlanetSurface">><</link>>
</div>
<</if>>
</div>
<</if>>
<</if>><<if not $deathclawScene or not $planet or not $planet.outdoor>>
<<goto "PlanetSurface">>
<<else>>
<<set _sc to $deathclawScene>>
<<set _pg to ($body and $body.gender) or "male">>
<div class="bee-aggro-root is-deathclaw">
<div class="bee-aggro-title">PUT DOWN</div>
<div class="scene-beat is-deathclaw">
<div class="scene-media-wrap">
<<set _dcPick to setup.deathclawPick()>>
<<print setup.mediaTag(_dcPick.path)>>
</div>
<div class="scene-prose">
<<switch _dcPick.hole>>
<<case "vag">>
It folds you into the sand and mounts you like you weigh nothing, and it breeds you slow and then not slow at all until you feel it in your gut. When it's done it shoulders you off and goes back to its shade.
<<case "anal">>
It gets a claw in your harness and turns you face down. You take it until your arms give out and it keeps going after that.
<<case "oral">>
There's nothing on you worth its time, so it takes the only thing you have got. It holds your head still with one claw and uses your throat until you stop trying to breathe on your own schedule.
<<case "strapon">>
It works out what you're wearing quicker than you expected and just takes it, riding the thing strapped to you with its whole weight until the harness is cutting into you and it has finished with the toy.
<<case "spent">>
You're already halfway gone when it gets to you. It uses what is left of you on the cave floor and you drift for most of it.
<<default>>
It gets a claw in you and there's no part of what happens next that you have a say in.
<</switch>>
</div>
</div>
<<if $deathclawScene and $deathclawScene.lines>>
<<if $deathclawScene.lines and $deathclawScene.lines.length>>
<div class="bee-aftermath-narration">
<<for _dcL range $deathclawScene.lines>>
<p @class="'aftermath-line aftermath-' + _dcL.type"><<print _dcL.text>></p>
<</for>>
</div>
<</if>>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get up out of the sand</span>'>>
<<set $deathclawScene to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<</if>>
<<set _hcInside to ($planet and $planet.location eq "indoor")>>
<<if $planet>>
<<run setup.hydrationCollapse()>>
<</if>>
<div class="ship-header"><<if _hcInside>>DOWN IN THE DARK<<else>>DOWN IN THE HEAT<</if>></div>
<div class="room-desc">
<<if _hcInside>>
The water runs out somewhere back down the passage and the cold does the rest, and it turns out you can be too dry to stand up in a room that has never once seen the sun. Your legs go first, then the edges of everything, and the stone comes up to meet you. The ship's auto-recall finds you in the dark some hours later and winches you out through the doorway on your back, because a dead slave's a wasted asset and a live one can still make quota. You come to on the floor of the bay with your tongue stuck to the roof of your mouth and a chunk of your haul still lying somewhere in that passage.
<<else>>
The water runs out somewhere you don't remember and the sun does the rest. Your legs go first, then the edges of everything, and the sand comes up to meet you. The ship's auto-recall scrapes you off the dune sometime after dark and drags you back through the airlock on the cargo winch, because a dead slave's a wasted asset and a live one can still make quota. You come to on the floor of the bay with your tongue stuck to the roof of your mouth and a chunk of your haul shaken loose somewhere out in the dunes.
<</if>>
</div>
<div class="ship-actions"><div class="ship-action">
<<link '<span class="action-label">Drag yourself up</span><span class="action-hint">Back on the ship</span>'>><<goto "Ship">><</link>>
</div></div>
<<goto "PlanetSurface">><<if not $snakeScene or not $planet or not $planet.outdoor>>
<<goto "PlanetSurface">>
<<else>>
<<set _sc to $snakeScene>>
<<set _pg to ($body and $body.gender) or "male">>
<div class="bee-aggro-root is-snake">
<<if _sc.phase eq "coil">>
<<run setup.openNagaCoilOverlay(_sc.roomId)>>
<<elseif _sc.phase eq "win">>
<<set _co to ($coilOutcome and $coilOutcome.kind eq "win") ? $coilOutcome : { pick: setup.coilWinPick(), lines: [] }>>
<<set _cwp to _co.pick>>
<div class="bee-aggro-title"><<if _cwp.sex>>YOU TAKE IT OUT ON HER<<else>>OFF YOU<</if>></div>
<div class="scene-beat is-snake">
<<if _cwp.sex>>
<div class="scene-media-wrap"><<print setup.mediaTag(setup.pickMedia(_cwp.pool))>></div>
<div class="scene-prose">
<<if _cwp.act eq "breed">>
The coils go slack for half a breath and you're out of them and onto her before she can get another wrap around you, all that length thrashing under your weight with nowhere left to put itself. You bend her over her own spring and fuck her in the shallows with the water going everywhere and her tail snapping at nothing, and you keep at it until the fight drains out of her and she's just taking it with her cheek down in the wet sand.
<<elseif _cwp.act eq "serve">>
The coils go slack for half a breath and you get an arm out and a fist around the back of her hood, and the second you've got the leverage she stops fighting and goes soft in your hands. She takes you in her mouth without being made to, working you slow at the water's edge like it's the smarter way to keep what's hers, and you let her have it that way.
<<elseif _cwp.act eq "anal">>
The coils go slack for half a breath and you twist out and drag her down by the hood before she can pour herself back into the deep end. She's still trying to get a wrap around your leg when you push into her ass, and the hiss she makes goes up half an octave and stays there. You hold her by the tail and take your time about it, and by the end she's not fighting you so much as riding it out.
<<elseif _cwp.act eq "futa">>
The coils go slack for half a breath and you're on top of her before you register the cock she's got, thick and already wet against your stomach. You fuck her with it trapped between the two of you and she comes on your belly halfway through and you keep going.
<<else>>
The coils go slack for half a breath and you get her on her back in the shallows with your palm on her chest, and she quits. You fuck her right there at the edge of her own water, her tail curling and uncurling behind you the whole time, and she takes it with her eyes half open and her hands doing nothing to stop you.
<</if>>
</div>
<<else>>
<div class="scene-prose">
<<if _cwp.why eq "caged">>
The coils go slack for half a breath and you get a knee into the thickest part of it and both hands under the jaw and you wrench until it lets go. You're on top of it in the shallows with your heart going and absolutely nothing you can do about that, because the cage doesn't care what the moment calls for. It stares up at you. You get off it and go get your water.
<<elseif _cwp.why eq "nocock">>
The coils go slack for half a breath and you get a knee into the thickest part of it and both hands under the jaw and you wrench until it lets go. You end up on top of it in the shallows, both of you breathing hard, and it looks up at you and waits to see what you're going to do. You're not built for what it's expecting. You get off it and go get your water.
<<else>>
The coils go slack for half a breath and you twist, get a knee against the thickest part of it and a hand under its jaw, and you wrench its head back until whatever was holding you so sure of itself gives all at once. It lets go and pours back into the deep end of the spring and watches you from the dark.
<</if>>
</div>
<</if>>
</div>
<<if _co.lines and _co.lines.length>>
<div class="bee-aftermath-narration">
<<for _cLi, _cLine range _co.lines>>
<<print '<p class="aftermath-line aftermath-' + _cLine.type + '">' + _cLine.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end is-snake">
<<link '<span class="action-label">Wade back out while it keeps its distance</span>'>>
<<set $snakeScene to null>>
<<set $coilOutcome to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
<<else>>
<<set _co to ($coilOutcome and $coilOutcome.kind eq "loss") ? $coilOutcome : { pick: setup.coilLossPick(), lines: [] }>>
<<set _clp to _co.pick>>
<div class="bee-aggro-title"><<if $snakeScene.toll>>YOU GIVE IN<<else>>THE LIGHTS GO OUT<</if>></div>
<div class="scene-beat is-snake">
<<if _clp.sex neq false>>
<div class="scene-media-wrap"><<print setup.mediaTag(setup.pickMedia(_clp.pool))>></div>
<</if>>
<div class="scene-prose">
<<if _clp.sex eq false>>
<<if $snakeScene.toll>>
You stop fighting and let the coils take your weight, and she pours down over you and goes looking, and finds the cage. She stops. That long body keeps you pinned in the warm shallows a while longer while she works out whether there's anything in this for her, and decides there isn't. She drops you in the mud and goes back to her water, and you drink because she's already lost interest in stopping you.
<<else>>
You wait too long and your air goes and the ground tips. You come back half in the shallows with her weight still across your hips and her head down at the cage, tasting the metal, working at a lock that isn't going to open for her. She gives up somewhere around the time you get your eyes focused. There's nothing in you she can reach and it's put her in a mood about it, and she takes that out on your ribs before she lets go.
<</if>>
<<elseif $snakeScene.toll>>
<<if _clp.act eq "ride">>
You stop fighting and let the coils take your weight, and it feels you give and pulls you down into the warm shallows. It sinks onto your cock and rides you slow, taking the toll for the spring out of you a stroke at a time, and when it's milked what it wants it lets you crawl to the water and fill up.
<<elseif _clp.act eq "both">>
You stop fighting and let the coils take your weight, and it feels you give and eases you down into the warm shallows almost gentle, then not gentle at all. He works both holes with a patience that says he's done this before and he's got all afternoon, and you pay for the water in the shallows twice over before he's finished with you.
<<elseif _clp.act eq "anal">>
You stop fighting and let the coils take your weight, and it feels you give and turns you over in the warm shallows and holds you there by the shoulder blades. He takes your ass with your tits pressed into the wet sand and the water lapping up under your chin, and you hold still for all of it because that's the price of the spring and you both know it.
<<else>>
You stop fighting and let the coils take your weight, and it feels you give and eases you down into the warm shallows almost gentle, then not gentle at all. You let him have you in the water for as long as he wants, because that's what the spring costs, and when he's done he lets you crawl over and fill up.
<</if>>
<<else>>
<<if _clp.act eq "ride">>
You wait too long and your air goes and the ground tips, and the last thing you get is the weight of it settling on your hips. You come back to it riding you in the shallows with the sun somewhere else in the sky, its whole length wrapped around you so there's nothing to do but lie there and give it what it's been milking out of you the entire time you were gone.
<<elseif _clp.act eq "both">>
You wait too long and your air goes and the ground tips. You come back with your face in the wet sand and him working both holes in a slow rhythm he clearly settled into a while ago, and by the sun you've been out of it long enough for him to have taken his time about deciding which he liked better.
<<elseif _clp.act eq "anal">>
You wait too long and your air goes and the ground tips. You come back bent over the lip of the spring with your tits dragging in the water and him deep in your ass, and you don't know how long it's been going on, only that the sun has moved and he isn't anywhere near done.
<<else>>
You wait too long and your air goes and the ground tips. You come back to him fucking you in the shallows with all that weight holding you half under the water, and the sun's moved far enough that you know you were gone for a good while.
<</if>>
<</if>>
</div>
</div>
<<if _co.lines and _co.lines.length>>
<div class="bee-aftermath-narration">
<<for _cLi, _cLine range _co.lines>>
<<print '<p class="aftermath-line aftermath-' + _cLine.type + '">' + _cLine.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end is-snake">
<<link '<span class="action-label">Get your legs under you and climb out</span>'>>
<<set $snakeScene to null>>
<<set $coilOutcome to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
</div>
<</if>><<if not $planet or not $planet.outdoor>>
The terrain ripples and you stagger as the map data corrupts under you, and the system bounces you back to your ship.
<<run setup.leavePlanetCleanup({ reclaimAltar: true })>>
<<set $ship.landed to false>>
<<set $planet to null>>
<br><br><<link "Back to ship">><<goto "Ship">><</link>>
<<else>>
<<if $planet.location eq "indoor">>
<<if $planet.indoor and $planet.indoor.biome eq "pyramid">>
<<goto "PyramidInterior">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<<else>>
<<run setup.linenOpenAir()>>
<<run setup.sealPyramidOnExit()>>
<<set _map to $planet.outdoor>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<set _td to setup.OUTDOOR_TYPES[_room.type]>>
<<set _baseBed to (setup.onSphinxter() ? 'Sounds/ambient/desert_wind.mp3' : 'Sounds/ambient/outdoor_scary.mp3')>>
<<run setup.setAmbient('base', _baseBed, { volume: 0.35 })>>
<<set _wxOut to (setup.weatherIs('thunderstorm') ? 'Sounds/ambient/rain.mp3'
: setup.weatherIs('sandstorm') ? 'Sounds/ambient/sandstorm.mp3' : null)>>
<<if _wxOut>>
<<run setup.setSpatialAmbient('weather', _wxOut, 'here', null, _wxOut)>>
<<else>>
<<run setup.stopAmbient('weather', 900)>>
<</if>>
<<run setup.applyProximityAmbient(_map, _room)>>
<<run setup.maybeRandomAtmosphere('outdoor')>>
<<if setup.onSphinxter() and $player.hydration lte 0>><<goto "HeatCollapse">><</if>>
<<if setup.onSphinxter() and $player.hydration lt 60>><<run setup.showHintOnce('thirstHint', "psst, the desert's drying you out. Fill up at the oasis (marked on the map) and drink from your bag to keep going.")>><</if>>
<<if $planet.weather and $planet.weather neq 'clear' and not $planet.weatherAnnounced>>
<<timed 250ms>>
<<run setup.openWeatherOverlay()>>
<</timed>>
<</if>>
<<if _room.minotaur and not _room.minotaurResolved>>
<<if not $minotaurEncounter or $minotaurEncounter.roomId neq _room.id>>
<<set _cameFromDirO to setup.dirToNeighbor(_room, $planet.outdoor.previousRoom)>>
<<set $minotaurEncounter to {
phase: 'telegraph',
chargeDir: setup.minotaurRollChargeDir(_room, _cameFromDirO),
roomId: _room.id
}>>
<<run setup.playSound('monster_roar', { volume: 0.85 })>>
<</if>>
<</if>>
<<roomImage `_room.img ? _room.img : _room.type`>>
<div class="room-header">$planet.name — <<print (_td ? _td.name : "Surface")>></div>
<<print setup.renderMiniMap(_map)>>
<<if $walk.active and $walk.queue.length gt 0>>
<<set _targetRoom to _map.rooms[$walk.target]>>
<<set _targetName to (_targetRoom ? setup.getRoomTypeData(_targetRoom).name : 'destination')>>
<div class="walk-banner">
Walking to <<print _targetName>> — <<print $walk.queue.length>> more <<if $walk.queue.length eq 1>>room<<else>>rooms<</if>>...
<<link "Stop">><<run setup.clearWalk()>><<goto "PlanetSurface">><</link>>
</div>
<<timed `(($settings && $settings.walkSpeed) || 0.5) + 's'`>>
<<if setup.walkStep()>>
<<run setup.playSound('step_grass', { volume: 0.45 })>>
<<run setup.advanceMinutes(setup.moveMinutes(8))>>
<<run setup.tickRoaming($planet)>>
<<run setup.tickHydration(false)>>
<<run setup.tickWeatherMove()>>
<<set _walkTick to null>>
<<if $pursuit.active and $pursuit.source eq "bees">>
<<set _walkTick to setup.pursuitTick()>>
<</if>>
<<if _walkTick eq "caught">>
<<run setup.clearWalk()>>
<<run setup.beeCatchNow()>>
<<goto "BeeAggro">>
<<else>>
<<set _dr to setup.tickDread()>>
<<if _dr eq "caught">>
<<run setup.clearWalk()>>
<<goto "ChaseCaught">>
<<elseif _dr eq "fire">>
<<run setup.clearWalk()>>
<<set $returnPassage to "PlanetSurface">>
<<goto "DreadWarning">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</if>>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</timed>>
<</if>>
<<if $pursuit.active and $pursuit.source eq "bees">>
<<if $pursuit.stage eq "timer">>
<div class="bee-banner bee-timer">
<div class="bee-banner-label">BEES CLOSING</div>
<div class="bee-countdown" id="bee-countdown"><<print $pursuit.secondsLeft>></div>
<div class="bee-banner-sub">MOVE A ROOM TO BREAK LINE OF SIGHT</div>
</div>
<<timed 1s>>
<<if $pursuit.active and $pursuit.stage eq "timer">>
<<set $pursuit.secondsLeft -= 1>>
<<if $pursuit.secondsLeft lte 0>>
<<run setup.beeCatchNow()>>
<<goto "BeeAggro">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</if>>
<</timed>>
<<elseif $pursuit.stage eq "chase">>
<div class="bee-banner bee-chase">
<div class="bee-banner-label">BEES IN PURSUIT — <<print $pursuit.roomsFled>> / <<print $pursuit.maxFlee>></div>
<div class="bee-banner-sub">KEEP MOVING. REACH YOUR SHIP OR A FACILITY DOOR.</div>
</div>
<</if>>
<</if>>
<<if not $pursuit.active>>
<<set _adjHiveDir to null>>
<<set _adjKappaDir to null>>
<<set _adjMinoOutDir to null>>
<<set _adjOniOutDir to null>>
<<for _axDir, _axTargetId range _room.exits>>
<<if _map.rooms[_axTargetId] and _map.rooms[_axTargetId].hive and not _map.rooms[_axTargetId].hiveTaken>>
<<set _adjHiveDir to _axDir>>
<</if>>
<<if _map.rooms[_axTargetId] and _map.rooms[_axTargetId].kappa and not _map.rooms[_axTargetId].kappaResolved>>
<<set _adjKappaDir to _axDir>>
<</if>>
<<if _map.rooms[_axTargetId] and _map.rooms[_axTargetId].minotaur and not _map.rooms[_axTargetId].minotaurResolved>>
<<set _adjMinoOutDir to _axDir>>
<</if>>
<<if _map.rooms[_axTargetId] and _map.rooms[_axTargetId].oni and not _map.rooms[_axTargetId].oniResolved>>
<<set _adjOniOutDir to _axDir>>
<</if>>
<<if _map.rooms[_axTargetId] and _map.rooms[_axTargetId].slime and not _map.rooms[_axTargetId].slimeResolved>>
<<set _adjSlimeDir to _axDir>>
<</if>>
<</for>>
<<set _adjThreats to []>>
<<if _adjMinoOutDir and not _room.minotaur>>
<<run _adjThreats.push({ dir: _adjMinoOutDir, rank: 4, short: "hooves shifting",
full: "You can hear something breathing slow and heavy to the " + setup.dirLabel(_adjMinoOutDir).toLowerCase() + ", with hooves dragging through loose dirt in between every breath. Whatever it is, it's big, and you don't want to be standing still when it figures out where you are." })>>
<</if>>
<<if _adjOniOutDir and not _room.oni>>
<<run _adjThreats.push({ dir: _adjOniOutDir, rank: 3, short: "someone humming",
full: "You can hear someone humming to the " + setup.dirLabel(_adjOniOutDir).toLowerCase() + ", slow and soft and almost female. Your head goes warm any time you listen too long, and that alone is reason enough to keep your distance until you know what's making the noise." })>>
<</if>>
<<if _adjKappaDir>>
<<run _adjThreats.push({ dir: _adjKappaDir, rank: 2, short: "water moving wrong",
full: "You can hear water sloshing around to the " + setup.dirLabel(_adjKappaDir).toLowerCase() + ", one clearing over. It doesn't feel natural at all, best not to confront whatever's doing that noise without something heavy in your hand first." })>>
<</if>>
<<if _adjSlimeDir and not _room.slime>>
<<run _adjThreats.push({ dir: _adjSlimeDir, rank: 2, short: "something wet dragging",
full: "Something to the " + setup.dirLabel(_adjSlimeDir).toLowerCase() + " is dragging itself over the ground one clearing away, wet and heavy and in no hurry about it. Whatever's making that sound doesn't have feet, and it stops every few seconds like it's tasting the air for you." })>>
<</if>>
<<if _adjHiveDir>>
<<run _adjThreats.push({ dir: _adjHiveDir, rank: 1, short: "a swarm humming",
full: "You can hear a deep fat buzzing hum coming from the " + setup.dirLabel(_adjHiveDir).toLowerCase() + ", one clearing over from where you're standing. That's a swarm, and you'd be smart to know exactly where they're before you wander that direction." })>>
<</if>>
<<if _adjThreats.length>>
<<run _adjThreats.sort(function(a,b){ return b.rank - a.rank; })>>
<<print setup.roomWarn(_adjThreats[0].dir, _adjThreats[0].full, 0)>>
<<if _adjThreats.length gt 1>>
<<set _restBits to []>>
<<for _ti to 1; _ti lt _adjThreats.length; _ti++>>
<<run _restBits.push(_adjThreats[_ti].short + " to the " + setup.dirLabel(_adjThreats[_ti].dir).toLowerCase())>>
<</for>>
<<print setup.roomWarn(_adjThreats[1].dir, "That isn't the only thing out there either. There's " + _restBits.join(", and ") + ".", 1)>>
<</if>>
<</if>>
<</if>>
<div class="room-desc"><<print (_td ? _td.desc : "")>></div>
<<set _kappaBlocked to (_room.kappa and not _room.kappaResolved and not $pursuit.active)>>
<<set _minoBlocked to (_room.minotaur and not _room.minotaurResolved and not $pursuit.active)>>
<<set _oniBlocked to (_room.oni and not _room.oniResolved and not $pursuit.active)>>
<<set _slimeBlocked to (_room.slime and not _room.slimeResolved and not $pursuit.active)>>
<<set _snakeBlocked to (_room.desertSnake and not _room.snakeResolved and not $pursuit.active)>>
<<if _slimeBlocked>>
<<slimeEncounter>>
<</if>>
<<if _snakeBlocked>>
<<set _snArmed to setup.snakeArmed()>>
<div class="slime-block is-snake">
<div class="slime-block-row">
<div class="slime-block-frame"><img src="Images/media/snake_desert/desert_snake_idle.jpg" alt="snake"></div>
<div class="slime-block-text">
<div class="slime-block-title">DESERT SNAKE</div>
<div class="slime-block-desc">It's coiled on a dead branch with its back half still in the sand, awake and in no rush, and it's been watching you since before you saw it. <<print setup.snakeExposedLine()>></div>
</div>
</div>
<div class="slime-block-links" id="snake-opts">
<<if _snArmed>>
<div class="ship-action slime-link is-swing"><<link `'<span class="action-label">Take its head off with your ' + $player.equipped.name + '</span>'`>>
<<run setup.snakeApproach(_room.id)>>
<</link>></div>
<div class="slime-link-off">Go at it barehanded</div>
<<else>>
<div class="slime-link-off">Take its head off</div>
<div class="ship-action slime-link is-swing"><<link '<span class="action-label">Go at it barehanded</span>'>>
<<run setup.snakeStartFight(_room.id, 1)>>
<</link>></div>
<</if>>
<<if $player.energy lt setup.SNAKE_LEAP_ENERGY>>
<div class="slime-link-off">Jump over it<span class="slime-link-off-hint">Nothing left in your legs. Needs <<= setup.SNAKE_LEAP_ENERGY>> energy</span></div>
<<else>>
<div class="ship-action slime-link"><<link `'<span class="action-label">Jump over it</span><span class="action-hint">' + setup.SNAKE_LEAP_ENERGY + ' energy — land wrong or take the bite and you\'re fighting it anyway</span>'`>>
<<replace "#snake-opts">>
<<set _lpMap to $planet.outdoor>>
<<for _li, _lex range setup.sortedExits(_lpMap, _lpMap.current)>>
<<capture _lex>>
<<set _lexRoom to _lpMap.rooms[_lex.targetId]>>
<<set _lexTd to setup.OUTDOOR_TYPES[_lexRoom.type]>>
<div class="ship-action slime-link">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_lex.dir)>></span> <<print setup.dirLabel(_lex.dir)>></span><span class="action-hint"><<print _lexTd.name>></span>'>>
<<set _lpRoll to setup.snakeLeapRoll($planet.outdoor.current)>>
<<if _lpRoll eq "fight">>
<<goto "SnakeFight">>
<<else>>
<<run setup.playSound('step_grass', { volume: 0.55 })>>
<<set $planet.outdoor.previousRoom to $planet.outdoor.current>>
<<set $planet.outdoor.current to _lex.targetId>>
<<set setup._distMapCache to null>>
<<run setup.tickRoaming($planet)>>
<<run setup.tickHydration(false)>>
<<run setup.tickWeatherMove()>>
<<tick `setup.moveMinutes(12)`>>
<<set _lpDread to setup.tickDread()>>
<<if _lpDread eq "caught">>
<<goto "ChaseCaught">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</if>>
<</link>>
</div>
<</capture>>
<</for>>
<</replace>>
<<timed 20ms>><<run setup.decorateActionHotkeys()>><</timed>>
<</link>></div>
<</if>>
</div>
</div>
<</if>>
<<if _oniBlocked>>
<<if not $oniEncounter or $oniEncounter.roomId neq _room.id>>
<<set $oniEncounter to { active: true, roomId: _room.id }>>
<</if>>
<<set _pgOniO to ($body and $body.gender) or 'male'>>
<<set _oniSubjO to (_pgOniO eq 'female') ? 'He' : 'She'>>
<<set _oniPronounO to (_pgOniO eq 'female') ? 'his' : 'her'>>
<div class="bee-aggro-root is-oni">
<div class="bee-aggro-title">EYES ON YOU</div>
<div class="scene-beat">
<div class="scene-prose">
<<print _oniSubjO>>'s standing out in the open watching you with <<print _oniPronounO>> head tilted to one side and a smile that isn't there for you, and the second <<print _oniPronounO>> gaze locks onto yours the rest of the landscape goes sideways around you, and you can feel <<print _oniPronounO>> at the edge of your skull pushing in.
</div>
</div>
</div>
<<timed 150ms>>
<<run setup.triggerOniStruggle()>>
<</timed>>
<</if>>
<<if _kappaBlocked>>
<<if not _room.kappaGender>>
<<set _pgender to ($body and $body.gender) or 'male'>>
<<if _pgender eq 'female'>>
<<set _room.kappaGender to 'male'>>
<<elseif Math.random() lt 0.70>>
<<set _room.kappaGender to 'female'>>
<<else>>
<<set _room.kappaGender to 'male'>>
<</if>>
<</if>>
<<set _idlePool to (_room.kappaGender eq 'female') ? 'kappa_idle_female' : 'kappa_idle_male'>>
<<set _kappaPortrait to setup.pickMedia(_idlePool)>>
<div class="kappa-block">
<div class="kappa-block-row">
<div class="kappa-block-frame">
<<print setup.mediaTag(_kappaPortrait)>>
</div>
<div class="kappa-block-text">
<div class="kappa-block-title">A KAPPA IS WATCHING</div>
<div class="kappa-block-tag"><<if _room.kappaGender eq 'female'>>FEMALE<<else>>MALE<</if>> · <<print setup.OUTDOOR_TYPES[_room.type].name>></div>
<<if _room.kappaGender eq 'female'>>
<div class="kappa-block-desc">She rises out of the reeds without a splash, smaller than the males, tits out and the dish on her head full, her eyes locked on the bulge in your pants instead of the bag on your back.</div>
<<else>>
<div class="kappa-block-desc">Something stands up chest-deep in the water without making a sound, green-skinned and black-eyed with a full dish on its head that sloshes when it tilts to look at you, and it's already half-hard.</div>
<</if>>
</div>
</div>
<<if $kappaFight and $kappaFight.active>>
<<set _bonusLine to "">>
<<if setup.kappaIsArmed($kappaFight.weaponAtStart)>>
<<set _bonusLine to "Weapon advantage still locked in.">>
<</if>>
<div class="kappa-block-warn">Engagement already underway. <<print _bonusLine>></div>
<div class="kappa-block-links">
<div class="ship-action">
<<link "Resume the fight">><<goto "KappaBattle">><</link>>
</div>
</div>
<<else>>
<<set _hasCucumber to false>>
<<for _kpI to 0; _kpI lt $ship.cargo.length; _kpI++>>
<<if $ship.cargo[_kpI].id eq 'cucumber'>><<set _hasCucumber to true>><</if>>
<</for>>
<<set _kEquippedId to ($player.equipped and $player.equipped.id) or null>>
<<set _kArmed to setup.kappaIsArmed(_kEquippedId)>>
<<set _kWeaponName to (_kEquippedId and setup.ITEMS[_kEquippedId]) ? setup.ITEMS[_kEquippedId].name : ''>>
<div class="kappa-block-links">
<<if _kArmed>>
<div class="ship-action">
<<link `'<span class="action-label kappa-action-win">Fight it (' + _kWeaponName + ')</span><span class="action-hint">Weapon swing drops it in one hit</span>'`>>
<<run setup.startKappaFight()>>
<<set $kappaFight.dish to 0>>
<<goto "KappaWin">>
<</link>>
</div>
<<else>>
<div class="ship-action">
<<link "Fight it">>
<<run setup.startKappaFight()>>
<<goto "KappaBattle">>
<</link>>
</div>
<</if>>
<<if _hasCucumber>>
<div class="ship-action">
<<link "Offer the cucumber">>
<<for _kpI2 to 0; _kpI2 lt $ship.cargo.length; _kpI2++>>
<<if $ship.cargo[_kpI2].id eq 'cucumber'>>
<<run $ship.cargo.splice(_kpI2, 1)>>
<<set _kpI2 to 999>>
<</if>>
<</for>>
<<set $kappaFight to null>>
<<set _room.kappaResolved to true>>
<<run setup.logBestiary('kappa', 'bribed')>>
<<set $useMessage to "The kappa grabs the cucumber out of your hand and dives, water settles around where it was, and the rest is just ripples.">>
<<tick 5>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
<<if $player.energy gte 20>>
<<set _sprintEn to $player.energy>>
<<set _sprintChance to Math.min(95, Math.round(40 + (_sprintEn / 100) * 50))>>
<div class="ship-action">
<<link "Sprint back the way you came">>
<<set $player.energy -= 12>>
<<if Math.random() lt (_sprintChance / 100)>>
<<set $useMessage to "You crash back through the reeds and it watches you go without following, but it's still there waiting if you decide to come back.">>
<<tick 8>>
<<run setup.logBestiary('kappa', 'escaped')>>
<<set _backTarget to null>>
<<set _prev to $planet.outdoor.previousRoom>>
<<for _axDir, _axTargetId range _room.exits>>
<<if _axTargetId eq _prev>>
<<set _backTarget to _axTargetId>>
<</if>>
<</for>>
<<if not _backTarget>>
<<for _axDir2, _axTargetId2 range _room.exits>>
<<if not _backTarget and _map.rooms[_axTargetId2] and _map.rooms[_axTargetId2].visited>>
<<set _backTarget to _axTargetId2>>
<</if>>
<</for>>
<</if>>
<<if not _backTarget>>
<<for _axDir3, _axTargetId3 range _room.exits>>
<<if not _backTarget>>
<<set _backTarget to _axTargetId3>>
<</if>>
<</for>>
<</if>>
<<if _backTarget>>
<<set $planet.outdoor.previousRoom to $planet.outdoor.current>>
<<set $planet.outdoor.current to _backTarget>>
<</if>>
<<goto "PlanetSurface">>
<<else>>
<<set $useMessage to "You bolt and a webbed hand catches your ankle on the way past, and you go down face-first in the shallows.">>
<<run setup.startKappaFight()>>
<<goto "KappaBattle">>
<</if>>
<</link>>
</div>
<span class="kappa-block-meta">12 energy · <<print _sprintChance>>% chance · failure pins you in the fight</span>
<<else>>
<span class="kappa-block-disabled">Sprint back the way you came <span class="kappa-block-disabled-hint">need 20 energy</span></span>
<</if>>
</div>
<</if>>
</div>
<</if>>
<<if _minoBlocked>>
<<run setup.openMinotaurOverlay('PlanetSurface')>>
<</if>>
<<if not _kappaBlocked and not _minoBlocked and not _oniBlocked and not _slimeBlocked and not _snakeBlocked>>
<<if _room.hive and not _room.hiveTaken>>
<div class="hive-block">
<div class="hive-drip"></div>
<div class="hive-title">BEE HIVE</div>
<div class="hive-desc">A hunk of alien honeycomb the size of your head is wedged on top of a flat rock, with a slow cloud of bees the size of your fist drifting around it that haven't clocked you yet, and the hum coming off the whole arrangement is loud enough that you can feel it in the back of your teeth before you can feel it in your ears.</div>
<<if setup.cargoFull()>>
<em>Your cargo is full. You can't take it like this.</em>
<<else>>
<div class="hive-warn">Grabbing this kicks off a 5 second window before they're on you.</div>
<div class="ship-action">
<<link '<span class="action-label hive-grab">Grab the hive</span><span class="action-hint">They will come for it</span>'>>
<<run setup.pickupHive()>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
</div>
<</if>>
<<if _room.loot and not _room.looted>>
<<if _room.tentacle and not _room.tentacleTriggered>>
<div class="goo-block">
<div class="goo-drip"></div>
<div class="goo-title">SOMETHING'S WRAPPED AROUND IT</div>
<div class="goo-desc">A <<print _room.loot.name>> is half-buried in the moss in front of you, except you can't really see it because the whole thing is wrapped in a thick cream-colored slime that's running off it down into the dirt, and the wet patch is bigger than the loot is, and a couple of the closer rocks are already pulsing slow on their own where they sit in it.</div>
<div class="goo-warn">Something underneath you wants you to put your hand on this.</div>
<div class="ship-action">
<<link `'<span class="action-label goo-grab">Reach for it anyway</span><span class="action-hint">Worth <span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + _room.loot.value + '</span></span>'`>>
<<set $tentacleLoot to _room.loot>>
<<set _room.tentacleTriggered to true>>
<<set _room.looted to true>>
<<if setup.cargoCanTake($tentacleLoot.id)>>
<<run setup.addCargo($tentacleLoot)>>
<<else>>
<<if not _room.droppedItems>><<set _room.droppedItems to []>><</if>>
<<run _room.droppedItems.push($tentacleLoot)>>
<</if>>
<<goto "TentacleAggro">>
<</link>>
</div>
</div>
<<else>>
<div class="room-loot">
<<print setup.lootLede(_room.loot.name)>> <img class="loot-icon" @src="'Images/items/' + _room.loot.id + '.png'" alt=""><span class="loot-name"><<print _room.loot.name>></span><<if _room.loot.spot>> <<print _room.loot.spot>><</if>>. It'd go for around <<creditChip _room.loot.value>> back at the station.<br>
<<if not setup.cargoCanTake(_room.loot.id)>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something on the ship first"><<print setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")>></span>
<<else>>
<<link `setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")`>>
<<run setup.addCargo(_room.loot)>>
<<set _room.looted to true>>
<<tick 5>>
<<goto "PlanetSurface">>
<</link>>
<</if>>
</div>
<</if>>
<</if>>
<<if _room.droppedItems and _room.droppedItems.length gt 0>>
<div class="room-loot dropped-list">
<span class="dropped-head">Dropped on the ground</span>
<<for _dI, _dItem range _room.droppedItems>>
<<capture _dI, _dItem>>
<div class="dropped-row">
<img class="loot-icon dropped-icon" @src="'Images/items/' + _dItem.id + '.png'" alt="">
<span class="dropped-name"><<print _dItem.name>></span>
<span class="dropped-val"><<creditChip _dItem.value>></span>
<<if setup.cargoFull()>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something first">pick up</span>
<<else>>
<<link "pick up">><<run setup.pickUpDropped(_room.id, _dI)>><<goto "PlanetSurface">><</link>>
<</if>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<<if _room.relayTower>><div id="tower-mount"></div><</if>>
<<if _room.wildHorse>><div id="horse-mount"></div><</if>>
<div class="ship-actions" id="room-nav-zone-out">
<<if setup.companionCaughtHere()>>
<<print setup.companionCaughtBlockHtml()>>
<<elseif setup.companionKoHere()>>
<<print setup.companionKoBlockHtml()>>
<</if>>
<<if _room.id eq "r0">>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/spaceship.png" alt=""><span class="action-label">Board the ship</span><span class="action-hint">Hatch open, cargo auto-stashed</span>'>><<run setup.dumpCargoToStorage()>><<goto "Ship">><</link>>
</div>
<</if>>
<<if _room.facilityEntrance>>
<div class="ship-action exit-doorway">
<<link '<img class="action-icon" src="Images/ui/minimap/facility_door.png" alt=""><span class="action-label">Enter the facility</span><span class="action-hint">Heavy sealed door</span>'>>
<<run setup.playSound('door_open', { volume: 0.7 })>>
<<if not $planet.indoor>><<set $planet.indoor to setup.generateIndoorMap()>><</if>>
<<if $planet.floors>><<run setup.setFacilityFloor($planet, 0, ($planet.floors[0].entrance || "r0"))>><</if>>
<<set $planet.location to "indoor">>
<<tick 5>>
<<goto "FacilityRoom">>
<</link>>
</div>
<</if>>
<<if _room.bazaar>>
<<if _room.cityGate>>
<<set _bzLabel to '<img class="action-icon" src="Images/ui/minimap/decor/des_gate.png" alt=""><span class="action-label">Through the city gates</span><span class="action-hint">The bazaar town inside the walls</span>'>>
<<else>>
<<set _bzLabel to '<img class="action-icon" src="Images/ui/minimap/bazaar.png" alt=""><span class="action-label">Into the bazaar</span><span class="action-hint">Stalls, smoke, vendors</span>'>>
<</if>>
<<if setup.cityClosed()>>
<div class="disabled-action"><img class="action-icon" src="Images/ui/minimap/decor/des_gate.png" alt=""><span class="action-label">Into the bazaar</span><span class="action-hint"> — the gates are shut until morning</span></div>
<<else>>
<div class="ship-action dir-facility">
<<link _bzLabel>>
<<run setup.playSound('step_gravel', { volume: 0.55 })>>
<<if not $planet.bazaarMap>><<set $planet.bazaarMap to setup.generateBazaarMap()>><</if>>
<<set $planet.bazaarMap.current to "r0">>
<<set $planet.bazaarMap.previousRoom to null>>
<<if not $beggar>><<set $beggar to { male: 0, female: 0, fled: false }>><<else>><<set $beggar.fled to false>><</if>>
<<tick 3>>
<<goto "Bazaar">>
<</link>>
</div>
<</if>>
<</if>>
<<if _room.pyramidEntrance>>
<div class="ship-action dir-facility">
<<link '<img class="action-icon" src="Images/ui/minimap/pyramid.png" alt=""><span class="action-label">Approach the pyramid door</span><span class="action-hint">Cold air, deep dark</span>'>>
<<run setup.playSound('door_open', { volume: 0.6 })>>
<<tick 3>>
<<goto "PyramidEntrance">>
<</link>>
</div>
<</if>>
<<if _room.deathclawDen and _room.denSealed>>
<div class="ship-action bazaar-soon"><img class="action-icon" src="Images/ui/minimap/cave_entrance.png" alt=""><span class="action-label">Down into the den</span><span class="action-hint">It has blocked off the entrance</span></div>
<<elseif _room.deathclawDen>>
<div class="ship-action dir-facility">
<<link '<img class="action-icon" src="Images/ui/minimap/cave_entrance.png" alt=""><span class="action-label">Down into the den</span><span class="action-hint">Musk and old blood. Something big.</span>'>>
<<run setup.playSound('step_gravel', { volume: 0.55 })>>
<<if not $planet.den>>
<<set $planet.den to setup.generateDenMap()>>
<</if>>
<<set $planet.den.current to "r0">>
<<set $planet.den.previousRoom to null>>
<<tick 3>>
<<goto "DeathclawDen">>
<</link>>
</div>
<</if>>
<<if _room.oasis>>
<<set _hasVessel to !!setup.findGourd()>>
<<if setup.springOffersNothing()>>
<div class="ship-action bazaar-soon"><img class="action-icon" src="Images/ui/minimap/oasis.png" alt=""><span class="action-label"><<if _hasVessel>>Fill the <<print setup.waterVesselName().toLowerCase()>><<else>>Kneel and drink<</if>></span><span class="action-hint"><<if _hasVessel>>Already full to the stopper<<else>>You aren't thirsty yet<</if>></span></div>
<<else>>
<<set _oaLabel to (_hasVessel ? ((_room.snakeBeaten ? 'Fill the ' : 'Kneel and fill the ') + setup.waterVesselName().toLowerCase()) : 'Kneel and drink')>>
<<set _oaHint to (_room.snakeBeaten ? 'Nothing left to charge you for it' : 'Tracks in, none out')>>
<<if not _hasVessel>><<set _oaHint to _oaHint + '. No vessel'>><</if>>
<div class="ship-action">
<<link `'<img class="action-icon" src="Images/ui/minimap/oasis.png" alt=""><span class="action-label">' + _oaLabel + '</span><span class="action-hint">' + _oaHint + '</span>'`>>
<<if setup.oasisAmbushRoll(_room)>>
<<run setup.playSound('monster_roar', { volume: 0.6 })>>
<<run setup.npcShakeFx()>>
<<run setup.snakeStartCoil(_room.id)>>
<<goto "SnakeCoil">>
<<else>>
<<run setup.playSound('step_grass', { volume: 0.5 })>>
<<run setup.drinkFromSpring()>>
<<tick 3>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
<</if>>
<</if>>
<<if _room.backHatch and $planet.outdoor.discoveredHatch>>
<div class="ship-action exit-emergency">
<<link '<img class="action-icon" src="Images/ui/minimap/exit_hatch.png" alt=""><span class="action-label">Drop through the hatch</span><span class="action-hint">Lands you at the service exit</span>'>>
<<run setup.playSound('rusty_hatch', { volume: 0.8 })>>
<<run setup.enterBackHatch()>>
<<tick 4>>
<<goto "FacilityRoom">>
<</link>>
</div>
<</if>>
<<if _room.relayTower>>
<div class="ship-action tower-approach">
<<link '<img class="action-icon" src="Images/ui/minimap/tower.png" alt=""><span class="action-label">Approach the relay tower</span><span class="action-hint">The comms trailer, dish still turning</span>'>>
<<run setup.playSound('step_gravel', { volume: 0.5 })>>
<<replace "#tower-mount">><<include "TowerPanel">><</replace>>
<<replace "#room-nav-zone-out">><</replace>>
<<run setup.decorateActionHotkeys()>>
<</link>>
</div>
<</if>>
<<if _room.wildHorse>>
<div class="ship-action horse-approach">
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">You found a horse</span><span class="action-hint">Out on the grass, wary and loose</span>'>>
<<run setup.playSound('step_grass', { volume: 0.4 })>>
<<replace "#horse-mount">><<include "HorsePanel">><</replace>>
<<replace "#room-nav-zone-out">><</replace>>
<<run setup.decorateActionHotkeys()>>
<</link>>
</div>
<</if>>
<<if _room.barn>>
<<run setup.ensureBarn()>><<run setup.ensureBarnQuest()>>
<div class="ship-action barn-approach">
<<if $barn.hired>>
<<link `'<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">Work your stall</span><span class="action-hint">' + setup.barnObjective() + '</span>'`>>
<<run setup.playSound('step_grass', { volume: 0.4 })>>
<<goto "Barn">>
<</link>>
<<else>>
<<link '<img class="action-icon" src="Images/ui/minimap/barn.png" alt=""><span class="action-label">The barn, and a farmer forking hay</span><span class="action-hint">One arm in a sling. He looks short a hand</span>'>>
<<run setup.playSound('step_grass', { volume: 0.4 })>>
<<goto "BarnFarmer">>
<</link>>
<</if>>
</div>
<</if>>
<<if _room.pentagram and _room.portal>>
<div class="ship-action altar-approach">
<<link '<img class="action-icon" src="Images/ui/minimap/portal.png" alt=""><span class="action-label">Step through the portal</span><span class="action-hint">The other side is already looking back</span>'>>
<<tick 3>>
<<goto "AltarShrine">>
<</link>>
</div>
<</if>>
<<if _room.altarSite>>
<div class="ship-action altar-approach">
<<link '<img class="action-icon" src="Images/ui/minimap/forest_entrance.png" alt=""><span class="action-label">Follow the broken path</span><span class="action-hint">Into the clearing. Something built this</span>'>>
<<run setup.playSound('step_grass', { volume: 0.5 })>>
<<if not $planet.ruin>><<set $planet.ruin to setup.generateRuinMap()>><</if>>
<<set $planet.ruin.current to "r0">>
<<set $planet.ruin.previousRoom to null>>
<<tick 3>>
<<goto "RuinGrounds">>
<</link>>
</div>
<</if>>
<<if _room.slaveShip and $slaveShip>>
<<if $slaveShip.state.roped>>
<div class="disabled-action"><span class="action-label">The parked ship is shut</span><span class="action-hint"><<if $slaveShip.state.ropeFailed>>Bolted from the inside now<<else>>Nothing left aboard worth the walk<</if>></span></div>
<<else>>
<div class="ship-action">
<<if $slaveShip.state.containmentTripped>>
<<link '<span class="action-label">The parked ship is sealed</span><span class="action-hint">Alarm still lit inside</span>'>>
<<goto "SlaveShipApproach">>
<</link>>
<<elseif not $slaveShip.state.shipEntered>>
<<link '<span class="action-label">Approach the parked ship</span><span class="action-hint">Not yours. Whose?</span>'>>
<<run setup.playSound('step_gravel', { volume: 0.5 })>>
<<goto "SlaveShipApproach">>
<</link>>
<<else>>
<<link '<span class="action-label">Step back inside the other ship</span><span class="action-hint">Hatch still open</span>'>>
<<run setup.playSound('hatch_open', { volume: 0.6 })>>
<<goto "SlaveShipInterior">>
<</link>>
<</if>>
</div>
<</if>>
<</if>>
<<set _exitList to setup.sortedExits(_map, _room.id)>>
<<for _i, _ex range _exitList>>
<<capture _ex>>
<<set _exRoom to _map.rooms[_ex.targetId]>>
<<set _exTd to setup.OUTDOOR_TYPES[_exRoom.type]>>
<<set _dirClass to 'ship-action'>>
<<if _exRoom.id eq 'r0'>><<set _dirClass += ' dir-start'>>
<<elseif _exRoom.facilityEntrance>><<set _dirClass += ' dir-facility'>>
<<elseif _exRoom.isExit>><<set _dirClass += ' dir-exit'>>
<<elseif not _exRoom.visited>><<set _dirClass += ' dir-unknown'>>
<</if>>
<div @class="_dirClass">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_ex.dir)>></span> <<print setup.dirLabel(_ex.dir)>></span><span class="action-hint"><<print _exTd.name>></span>'>>
<<run setup.playSound('step_grass', { volume: 0.55 })>>
<<set $planet.outdoor.previousRoom to $planet.outdoor.current>>
<<set $planet.outdoor.current to _ex.targetId>>
<<set setup._distMapCache to null>>
<<run setup.tickRoaming($planet)>>
<<run setup.tickHydration(false)>>
<<run setup.tickWeatherMove()>>
<<tick `setup.moveMinutes(12)`>>
<<set _tickResult to null>>
<<if $pursuit.active and $pursuit.source eq "bees">>
<<set _tickResult to setup.pursuitTick()>>
<</if>>
<<if _tickResult eq "caught">>
<<run setup.beeCatchNow()>>
<<goto "BeeAggro">>
<<else>>
<<set _dr2 to setup.tickDread()>>
<<if _dr2 eq "caught">>
<<goto "ChaseCaught">>
<<elseif _dr2 eq "fire">>
<<set $returnPassage to "PlanetSurface">>
<<goto "DreadWarning">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</if>>
<</link>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
<</if>><<if not $planet or not setup.getActiveMap()>>
The walls warp around you as the map data corrupts, and the system bails you back to the surface.
<<if $planet>><<set $planet.location to "outdoor">><</if>>
<br><br><<link "Continue">><<goto "PlanetSurface">><</link>>
<<else>>
<<run setup.ensureChase(null, false)>>
<<if $pendingCoreOutDialog>>
<<set $pendingCoreOutDialog to false>>
<<run setup.slimeCoreOutDialog()>>
<</if>>
<<set _map to setup.getActiveMap()>>
<<run setup.promoteGrowingSlimes(_map)>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<set _td to setup.INDOOR_TYPES[_room.type]>>
<<run setup.mistOnRender()>>
<<if $facilityDark>>
<<run setup.setAmbient('base', 'Sounds/ambient/facility_dark.mp3', { volume: 0.55 })>>
<<else>>
<<run setup.setAmbient('base', 'Sounds/ambient/facility_creepy.mp3', { volume: 0.4 })>>
<</if>>
<<set _wxIn to (setup.weatherIs('thunderstorm') ? 'Sounds/ambient/rain.mp3'
: setup.weatherIs('sandstorm') ? 'Sounds/ambient/sandstorm.mp3' : null)>>
<<set _deep to (($planet.floorIndex or 0) gt 0)>>
<<if _wxIn and not _deep>>
<<run setup.setSpatialAmbient('weather', _wxIn, 'far', null, _wxIn)>>
<<else>>
<<run setup.stopAmbient('weather', 900)>>
<</if>>
<<run setup.applyProximityAmbient(_map, _room)>>
<<run setup.maybeRandomAtmosphere('indoor')>>
<<if _room.minotaur and not _room.minotaurResolved>>
<<if not $minotaurEncounter or $minotaurEncounter.roomId neq _room.id>>
<<set _cameFromDir to setup.dirToNeighbor(_room, $planet.indoor.previousRoom)>>
<<set $minotaurEncounter to {
phase: 'telegraph',
chargeDir: setup.minotaurRollChargeDir(_room, _cameFromDir),
roomId: _room.id
}>>
<<run setup.playSound('monster_roar', { volume: 0.85 })>>
<</if>>
<</if>>
<<if _room.oni and not _room.oniResolved>>
<<if not $oniEncounter or $oniEncounter.roomId neq _room.id>>
<<set $oniEncounter to { active: true, roomId: _room.id }>>
<<run setup.setAmbient('encounter', 'Sounds/ambient/oni_voices.mp3', { volume: 0.55 })>>
<</if>>
<<else>>
<<run setup.stopAmbient('encounter')>>
<</if>>
<<roomImage `_room.img ? _room.img : _room.type`>>
<div class="room-header">$planet.name — Facility — <<if _room.gate>><<print _room.gate.color.toUpperCase()>> Blast Door<<else>><<print (_td ? _td.name : "Interior")>><</if>></div>
<<print setup.renderMiniMap(_map)>>
<<if not $walk.active and setup.mistDensityHere() gt 0 and not setup.inBlockingScene()>>
<div id="mist-banner-wrap"><<print setup.mistBannerHtml()>></div>
<<repeat 1s>>
<<if setup.mistFillTick() eq "ko">>
<<run setup.mistKnockout()>>
<<goto "MistKnockout">>
<<else>>
<<run setup.mistBumpVisual()>>
<<replace "#mist-banner-wrap">><<print setup.mistBannerHtml()>><</replace>>
<</if>>
<</repeat>>
<</if>>
<<if $walk.active and $walk.queue.length gt 0>>
<<set _targetRoom to _map.rooms[$walk.target]>>
<<set _targetName to (_targetRoom ? setup.getRoomTypeData(_targetRoom).name : 'destination')>>
<div class="walk-banner">
Walking to <<print _targetName>> — <<print $walk.queue.length>> more <<if $walk.queue.length eq 1>>room<<else>>rooms<</if>>...
<<link "Stop">><<run setup.clearWalk()>><<goto "FacilityRoom">><</link>>
</div>
<<timed `(($settings && $settings.walkSpeed) || 0.5) + 's'`>>
<<if setup.walkStep()>>
<<run setup.playSound('step_gravel', { volume: 0.45 })>>
<<run setup.advanceMinutes(setup.moveMinutes(8))>>
<<run setup.tickRoaming($planet)>>
<<run setup.tickHydration(false)>>
<<set _drTick to setup.tickDread()>>
<<if _drTick eq "caught">>
<<run setup.clearWalk()>>
<<goto "ChaseCaught">>
<<elseif _drTick eq "fire">>
<<run setup.clearWalk()>>
<<set $returnPassage to "FacilityRoom">>
<<goto "DreadWarning">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</timed>>
<</if>>
<<if _room.type eq 'generator' and _room.generatorPulled>>
<div class="room-desc">The cables hang loose out of the rack where the cube used to sit, sparking softly into the dark every few seconds, and the hum that used to fill this room is gone for good, leaving the air thick with ozone and warm dust and whatever light you brought in with you.</div>
<<elseif $facilityDark and _room.type neq 'generator'>>
<div class="room-desc"><<if $coreOutBy eq "slime">>The lights have been out facility-wide since the core died on its own, and you still don't like that you don't know why.<<elseif $coreOutBy eq "crew">>The lights have been out facility-wide since <<print ($companion ? $companion.name : "your crew")>> pulled the core.<<elseif $coreOutBy eq "you">>The lights have been out facility-wide since you yanked the core.<<else>>The power gave out facility-wide a while back and nothing has come on since.<</if>> <<print setup.facilityRoomDesc(_room, _td)>></div>
<<else>>
<div class="room-desc"><<print setup.facilityRoomDesc(_room, _td)>></div>
<</if>>
<<set _adjMinoDir to null>>
<<set _adjOniDir to null>>
<<for _gxDir, _gxTargetId range _room.exits>>
<<if _map.rooms[_gxTargetId] and _map.rooms[_gxTargetId].minotaur and not _map.rooms[_gxTargetId].minotaurResolved>>
<<set _adjMinoDir to _gxDir>>
<</if>>
<<if _map.rooms[_gxTargetId] and _map.rooms[_gxTargetId].oni and not _map.rooms[_gxTargetId].oniResolved>>
<<set _adjOniDir to _gxDir>>
<</if>>
<</for>>
<<set _hintIxI to 0>>
<<if _adjMinoDir and not _room.minotaur>>
<<print setup.roomWarn(_adjMinoDir, "You can hear a low slow growl coming through the " + setup.dirLabel(_adjMinoDir).toLowerCase() + " wall right next to you, with heavy steps shifting weight across a concrete floor on the other side. Whatever it is, it's big, and you don't want to walk into the room it's standing in without a plan first.")>>
<<set _hintIxI += 1>>
<</if>>
<<if _adjOniDir and not _room.oni>>
<<print setup.roomWarn(_adjOniDir, "You can hear someone humming on the other side of the " + setup.dirLabel(_adjOniDir).toLowerCase() + " wall, a slow soft tune you don't recognize that sounds female. Your head goes warm any time you stand still and listen, and that alone is reason enough to keep moving and not stop until you're somewhere else.", _hintIxI)>>
<<set _hintIxI += 1>>
<</if>>
<<if setup.wardenPresent and setup.wardenPresent() and setup.getActiveMap().warden.roomId eq setup.getActiveMap().current>>
<<set _wdn to setup.getActiveMap().warden>>
<div class="slime-block is-warden warden-block">
<div class="slime-block-row">
<div class="slime-block-frame"><img class="warden-figure" @src="setup.MEDIA.angel_idle[0]" alt=""></div>
<div class="slime-block-text">
<div class="slime-block-title"><<if _wdn.active>>IT'S FACING YOU<<else>>A STATUE<</if>></div>
<div class="slime-block-desc"><<if _wdn.active>>Pale stone, close enough to touch, arms a little out from its sides like it was mid-reach when you turned around. It doesn't move while you're looking at it. It wasn't standing there before.<<else>>A pale marble figure, seen from behind, standing where no statue has any business being. The stone looks freshly cut. Something about the set of its shoulders says you shouldn't walk past without looking at it.<</if>></div>
</div>
</div>
<div class="slime-block-links">
<<if setup.findSledgehammer()>>
<div class="ship-action"><<link '<span class="action-label">Break the statue</span><span class="action-hint">one clean swing with the sledgehammer</span>'>>
<<run setup.wardenBreakAttempt()>>
<</link>></div>
<<else>>
<div class="slime-link-off">Break the statue<span class="slime-link-off-hint">you'd need a sledgehammer; a crowbar just bounces off</span></div>
<</if>>
</div>
</div>
<</if>>
<<if _room.slime and not _room.slimeResolved>>
<<slimeEncounter>>
<<elseif _room.oni and not _room.oniResolved>>
<<set _pgOni to ($body and $body.gender) or 'male'>>
<<set _oniSubj to (_pgOni eq 'female') ? 'He' : 'She'>>
<<set _oniPronoun to (_pgOni eq 'female') ? 'his' : 'her'>>
<div class="bee-aggro-root is-oni">
<div class="bee-aggro-title">EYES ON YOU</div>
<div class="scene-beat">
<div class="scene-prose">
<<print _oniSubj>>'s standing across the room watching you with <<print _oniPronoun>> head tilted to one side and a smile that isn't there for you, and the second <<print _oniPronoun>> gaze locks onto yours the rest of the room goes sideways around you, and you can feel <<print _oniPronoun>> at the edge of your skull pushing in.
</div>
</div>
</div>
<<timed 150ms>>
<<run setup.triggerOniStruggle()>>
<</timed>>
<<elseif _room.minotaur and not _room.minotaurResolved>>
<<run setup.openMinotaurOverlay('FacilityRoom')>>
<<else>>
<<if _room.loot and not _room.looted>>
<<if _room.tentacle and not _room.tentacleTriggered>>
<div class="goo-block">
<div class="goo-drip"></div>
<div class="goo-title">SOMETHING'S ON IT</div>
<div class="goo-desc">A <<print _room.loot.name>> is on the floor in front of you and you can't really see it, because the whole thing is coated in some kind of thick cream-colored slime with more of it puddled out around it onto the tiles, and over in the corner a drain grate is weeping the same slime back up out of the floor slow and steady like the building's leaking from underneath.</div>
<div class="goo-warn">Something under the floor wants you to put your hand on this.</div>
<<link `'<span class="action-label goo-grab">Reach for it anyway</span><span class="action-hint">Worth <span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + _room.loot.value + '</span></span>'`>>
<<set $tentacleLoot to _room.loot>>
<<set _room.tentacleTriggered to true>>
<<set _room.looted to true>>
<<if setup.cargoCanTake($tentacleLoot.id)>>
<<run setup.addCargo($tentacleLoot)>>
<<else>>
<<if not _room.droppedItems>><<set _room.droppedItems to []>><</if>>
<<run _room.droppedItems.push($tentacleLoot)>>
<</if>>
<<goto "TentacleAggro">>
<</link>>
</div>
<<elseif _room.loot.id eq "bondage_rope">>
<div class="room-loot">
There's a <img class="loot-icon" @src="'Images/items/' + _room.loot.id + '.png'" alt=""><span class="loot-name">coil of red rope</span> <<print _room.loot.spot>>, laid out neat like somebody set it down a second ago. The station would hand you around <<creditChip _room.loot.value>> for cord this clean.<br>
<<link "Reach for the rope">>
<<set _room.looted to true>>
<<set _room.loot to null>>
<<run setup.springHangTrap()>>
<<goto "HangingTrap">>
<</link>>
</div>
<<elseif _room.generator and not _room.generatorPulled>>
<div class="generator-block">
<div class="generator-title">GENERATOR CORE</div>
<div class="generator-desc">A glowing yellow cube sits socketed into the main rack with cables thick as your wrist running out of it in every direction, and the hum coming off the whole arrangement is the only reason anything in this facility still has lights. Scrapped it goes for about <<creditChip _room.loot.value>>.</div>
<div class="generator-warn">Pulling it kills the power facility-wide.</div>
<<if not setup.cargoCanTake(_room.loot.id)>>
<em>Your cargo is full. Dump something first.</em>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Yank the core out</span><span class="action-hint">Lights go out facility-wide</span>'>>
<<run setup.addCargo(_room.loot)>>
<<run setup.pullGeneratorCore()>>
<<tick 8>>
<<goto "FacilityRoom">>
<</link>>
</div>
<</if>>
</div>
<<else>>
<div class="room-loot">
<<print setup.lootLede(_room.loot.name)>> <img class="loot-icon" @src="'Images/items/' + _room.loot.id + '.png'" alt=""><span class="loot-name"><<print _room.loot.name>></span> <<print _room.loot.spot>>. The station would hand you around <<creditChip _room.loot.value>> for it back at the desk.<br>
<<if not setup.cargoCanTake(_room.loot.id)>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something on the ship first"><<print setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")>></span>
<<else>>
<<link `setup.nameVerb(_room.loot.name, "Pick it up", "Pick them up")`>>
<<if setup.wardenPickupIntercept and setup.wardenPickupIntercept(_room)>>
<<else>>
<<run setup.addCargo(_room.loot)>>
<<set _room.looted to true>>
<<tick 5>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
<</if>>
</div>
<</if>>
<</if>>
<<if _room.droppedItems and _room.droppedItems.length gt 0>>
<div class="room-loot dropped-list">
<span class="dropped-head">Dropped on the ground</span>
<<for _dI, _dItem range _room.droppedItems>>
<<capture _dI, _dItem>>
<div class="dropped-row">
<img class="loot-icon dropped-icon" @src="'Images/items/' + _dItem.id + '.png'" alt="">
<span class="dropped-name"><<print _dItem.name>></span>
<span class="dropped-val"><<creditChip _dItem.value>></span>
<<if setup.cargoFull()>>
<span class="loot-grab is-disabled" title="Your cargo is full. Dump something first">pick up</span>
<<else>>
<<link "pick up">><<run setup.pickUpDropped(_room.id, _dI)>><<goto "FacilityRoom">><</link>>
<</if>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<<if _room.squeezeExits and Object.keys(_room.squeezeExits).length gt 0>>
<<for _sqDir, _sqTargetId range _room.squeezeExits>>
<<capture _sqDir, _sqTargetId>>
<<set _sqTarget to _map.rooms[_sqTargetId]>>
<<if _sqTarget and _sqTarget.locked>>
<div class="squeeze-block">
<div class="squeeze-title">THE HOLE IN THE WALL</div>
<div class="squeeze-desc">There's a gap punched through the wall on the <<print setup.dirLabel(_sqDir)>> side where the bolts have bent and the plaster's torn off in chunks, just big enough for a body to wedge through if you don't mind a scrape on the way, and whatever's on the far side of it has been sealed off long enough that nobody on either end knows the other one's there.</div>
<div class="squeeze-warn">If you're too built to fit, you'll get stuck halfway through it.</div>
<div class="ship-action">
<<link '<span class="action-label">Wedge yourself through</span><span class="action-hint">One-way trip. Door only opens from inside</span>'>>
<<set $wallSqueeze to { anchorId: _room.id, lockedId: _sqTargetId, dir: _sqDir }>>
<<if setup.rollSqueezeStuck()>>
<<tick 20>>
<<goto "WallStuck">>
<<else>>
<<run setup.clearSqueezeEdge(_room.id, _sqTargetId)>>
<<set $planet.indoor.current to _sqTargetId>>
<<set $wallSqueeze to null>>
<<tick `setup.moveMinutes(10)`>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
</div>
</div>
<</if>>
<</capture>>
<</for>>
<</if>>
<<if _room.gate and not _room.gate.open>>
<div id="gate-mount"></div>
<</if>>
<div class="ship-actions" id="room-nav-zone">
<<if setup.companionCaughtHere()>>
<<print setup.companionCaughtBlockHtml()>>
<<elseif setup.companionKoHere()>>
<<print setup.companionKoBlockHtml()>>
<</if>>
<<if _room.gate and not _room.gate.open>>
<<set _gcLabel to _room.gate.color.toUpperCase()>>
<<set _gcHexA to setup.KEYPAD_COLORS[_room.gate.color] or '#8893a8'>>
<<if _room.gate.tripped>>
<div class="ship-action disabled-action gate-approach is-tripped" @style="'--gate-c:' + _gcHexA + ';'">
<img class="action-icon" src="Images/ui/minimap/facility_door.png" alt=""><span class="action-label"><<print _gcLabel>> Blast Door</span><span class="action-hint">Defence tripped — the panel's fried, the door's sealed</span>
</div>
<<else>>
<div class="ship-action gate-approach" @style="'--gate-c:' + _gcHexA + ';'">
<<link `'<img class="action-icon" src="Images/ui/minimap/facility_door.png" alt=""><span class="action-label">Approach the keypad</span><span class="action-hint">' + _gcLabel + ' Blast Door</span>'`>>
<<replace "#gate-mount">><<include "GatePanel">><</replace>>
<<replace "#room-nav-zone">><</replace>>
<<run setup.decorateActionHotkeys()>>
<</link>>
</div>
<</if>>
<</if>>
<<if not (_room.gate and not _room.gate.open)>>
<<if setup.chaseActive() and setup.roomHasStalls(_room)>>
<div class="ship-action stall-hide">
<<link '<img class="action-icon" src="Images/ui/minimap/toilet.png" alt=""><span class="action-label">Slip into a stall</span><span class="action-hint">Hold your breath and hope it walks past</span>'>>
<<run setup.playSound('door_close', { volume: 0.5 })>>
<<goto "StallHide">>
<</link>>
</div>
<</if>>
<<if setup.chaseActive() and setup.roomHasLockers(_room)>>
<div class="ship-action stall-hide">
<<link '<img class="action-icon" src="Images/ui/minimap/locker.png" alt=""><span class="action-label">Slip into a locker</span><span class="action-hint">Steel between you and it, if your lungs cooperate</span>'>>
<<run setup.playSound('door_close', { volume: 0.5 })>>
<<set $lockerBeat to null>>
<<set $lockerPeek to null>>
<<set $lockerHide to null>>
<<goto "LockerHide">>
<</link>>
</div>
<</if>>
<<if _room.type eq 'bathroom' and (setup.playerIsMessy() or $player.lust gte setup.SHOWER_RELIEF_LUST)>>
<<if setup.chaseActive()>>
<div class="ship-action disabled-action"><img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Head to the wash room</span><span class="action-hint">Not with that thing running the halls</span></div>
<<else>>
<div id="bath-slot"><div class="ship-action bath-enter">
<<link '<img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Head to the wash room</span><span class="action-hint">A tub, a curtain, water that still runs</span>'>>
<<run setup.playSound('door_open', { volume: 0.5 })>>
<<run $('#passages .room-image').css('background-image', "url('Images/locations/facility/og_bathroom.png')")>>
<<replace "#bath-slot">>
<div class="ship-action shower-use">
<<link '<img class="action-icon" src="Images/ui/minimap/shower.png" alt=""><span class="action-label">Take a shower</span><span class="action-hint">Wash everything off you, and out of you</span>'>>
<<goto "FacilityShower">>
<</link>>
</div>
<</replace>>
<<timed 20ms>><<run setup.decorateActionHotkeys()>><</timed>>
<</link>>
</div></div>
<</if>>
<</if>>
<</if>>
<<if _room.id eq "r0" and (not $planet.floors or $planet.floorIndex eq 0)>>
<div class="ship-action exit-doorway">
<<link '<img class="action-icon" src="Images/ui/minimap/facility_door.png" alt=""><span class="action-label">Step back outside</span><span class="action-hint">Main door</span>'>>
<<run setup.playSound('door_close', { volume: 0.7 })>>
<<run setup.exitFacility()>>
<<tick 5>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
<<if _room.isExit>>
<div class="ship-action exit-emergency">
<<link '<img class="action-icon" src="Images/ui/minimap/exit_hatch.png" alt=""><span class="action-label">Crack the service door</span><span class="action-hint">Emergency exit to surface</span>'>>
<<run setup.playSound('rusty_hatch', { volume: 0.8 })>>
<<run setup.useServiceExit()>>
<<tick 5>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</if>>
<<if _room.stairDown>>
<div class="ship-action exit-doorway">
<<link `'<img class="action-icon" src="Images/ui/minimap/stairs.png" alt=""><span class="action-label">Go down the stairs</span><span class="action-hint">Down to the ' + setup.facilityFloorName(_room.stairDown.floor) + '</span>'`>>
<<run setup.takeStairs('down')>>
<<set _stEv to setup.rollStairsEvent()>>
<<if _stEv>><<goto _stEv>><<else>><<goto "FacilityRoom">><</if>>
<</link>>
</div>
<</if>>
<<if _room.stairUp>>
<div class="ship-action exit-doorway">
<<link `'<img class="action-icon" src="Images/ui/minimap/stairs.png" alt=""><span class="action-label">Go up the stairs</span><span class="action-hint">Up to the ' + setup.facilityFloorName(_room.stairUp.floor) + '</span>'`>>
<<run setup.takeStairs('up')>>
<<set _stEv to setup.rollStairsEvent()>>
<<if _stEv>><<goto _stEv>><<else>><<goto "FacilityRoom">><</if>>
<</link>>
</div>
<</if>>
<<set _exitList to setup.sortedExits(_map, _room.id)>>
<<for _i, _ex range _exitList>>
<<capture _ex>>
<<set _exRoom to _map.rooms[_ex.targetId]>>
<<set _exTd to setup.INDOOR_TYPES[_exRoom.type]>>
<<set _dirClass to 'ship-action'>>
<<if _exRoom.id eq 'r0'>><<set _dirClass += ' dir-start'>>
<<elseif _exRoom.isExit>><<set _dirClass += ' dir-exit'>>
<<elseif not _exRoom.visited>><<set _dirClass += ' dir-unknown'>>
<</if>>
<div @class="_dirClass">
<<link '<span class="action-label"><span class="dir-arrow"><<print setup.dirArrow(_ex.dir)>></span> <<print setup.dirLabel(_ex.dir)>></span><span class="action-hint"><<print _exTd.name>></span>'>>
<<run setup.playSound('step_gravel', { volume: 0.55 })>>
<<set $planet.indoor.previousRoom to $planet.indoor.current>>
<<set $planet.indoor.current to _ex.targetId>>
<<set setup._distMapCache to null>>
<<run setup.tickRoaming($planet)>>
<<run setup.tickHydration(false)>>
<<tick `setup.moveMinutes(10)`>>
<<set _drTick to setup.tickDread()>>
<<if _drTick eq "caught">>
<<goto "ChaseCaught">>
<<elseif _drTick eq "fire">>
<<set $returnPassage to "FacilityRoom">>
<<goto "DreadWarning">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
<<if not $beeScene or not $beeScene.applied>>
<<set _scene to setup.composeBeeScene()>>
<<set _scene.applied to true>>
<<set _scene.outcome to setup.applyBeeOutcome(_scene)>>
<<set _scene.vialStatus to setup.grantNectarBottle()>>
<<run setup.endBeeChase(false)>>
<<set $beeScene to _scene>>
<</if>>
<<set _scene to $beeScene>>
<<set _outcome to $beeScene.outcome>>
<<set _vialStatus to $beeScene.vialStatus>>
<div class="bee-aggro-root">
<div class="bee-aggro-title"><<if _scene.queenFlip>>YOU FOUND THE QUEEN<<elseif _scene.workerDom>>THE SWARM TAKES A TURN<<else>>THE SWARM REACHES YOU<</if>></div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<if _scene.sequence>>
<<for _qI, _qSrc range _scene.sequence>>
<<print setup.mediaTag(_qSrc)>>
<</for>>
<<else>>
<<print _scene.media>>
<</if>>
</div>
<div class="scene-prose"><<print setup.beeSceneProse(_scene)>></div>
</div>
<div class="bee-aftermath-narration">
<<for _lI, _line range _outcome.lines>>
<<print '<p class="aftermath-line aftermath-' + _line.type + '">' + _line.text + '</p>'>>
<</for>>
<<if _vialStatus eq "cargo">>
<p class="aftermath-line aftermath-reward">You pick the warm vial up out of the grass on the way past and it slips into your bag without much trouble, still warm enough through the glass that you can feel it against your hip.</p>
<<elseif _vialStatus eq "storage">>
<p class="aftermath-line aftermath-reward">You pick the warm vial up out of the grass and your bag's already full, so it ends up stashed in the ship instead when you get back.</p>
<<else>>
<p class="aftermath-line aftermath-gear">The vial slips out of your fingers on the way up and shatters on the rocks, because you were already carrying more than you had a place for.</p>
<</if>>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get up and walk it off</span>'>>
<<set $beeScene to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<<if (not $tentacleScene or not $tentacleScene.applied) and setup.tentaclePairShouldFire()>>
<<goto "TentaclePair">>
<</if>>
<<if not $tentacleScene or not $tentacleScene.applied>>
<<set _scene to setup.composeTentacleScene()>>
<<set _scene.applied to true>>
<<set _scene.outcome to setup.applyTentacleOutcome(_scene)>>
<<set $tentacleScene to _scene>>
<</if>>
<<set _scene to $tentacleScene>>
<<set _outcome to $tentacleScene.outcome>>
<<set _tentLoc to ($planet and $planet.location eq 'outdoor') ? 'outdoor' : 'indoor'>>
<div class="bee-aggro-root is-tentacle">
<div class="bee-aggro-title"><<if _scene.fullTrap>><<if _tentLoc eq 'outdoor'>>THE GROUND OPENS UP<<else>>THE FLOOR SWALLOWS YOU<</if>><<else>>THE GOO COMES ALIVE<</if>></div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<if _scene.sequence>>
<<for _qI, _qSrc range _scene.sequence>>
<<print setup.mediaTag(_qSrc)>>
<</for>>
<<else>>
<<print setup.mediaTag(_scene.media)>>
<</if>>
</div>
<div class="scene-prose"><<print setup.tentacleSceneProse(_scene)>></div>
</div>
<<if _outcome.lines and _outcome.lines.length>>
<div class="bee-aftermath-narration">
<<for _lI, _line range _outcome.lines>>
<<print '<p class="aftermath-line aftermath-' + _line.type + '">' + _line.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Drag yourself up and keep moving</span>'>>
<<set $tentacleScene to null>>
<<set $tentacleLoot to null>>
<<if _tentLoc eq 'outdoor'>>
<<goto "PlanetSurface">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
</div>
</div>
<<if not $tentaclePair or not $tentaclePair.applied>>
<<set _ps to setup.composeTentaclePair()>>
<<set _ps.applied to true>>
<<set $tentaclePair to _ps>>
<</if>>
<<set _ps to $tentaclePair>>
<<set _tentLoc to ($planet and $planet.location eq 'outdoor') ? 'outdoor' : 'indoor'>>
<div class="bee-aggro-root is-tentacle">
<div class="bee-aggro-title">THE GOO TAKES YOU BOTH</div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_ps.media)>>
</div>
<div class="scene-prose"><<print setup.tentaclePairProse(_ps)>></div>
</div>
<<if not _ps.resolved>>
<div class="scene-prose tentacle-pair-decide">You both get a hand free at the same second. There's slack enough to save one of you clean.</div>
<div class="bee-aggro-end tentacle-pair-choice">
<<link '<span class="action-label">Get her loose first</span><span class="action-hint">you stay in for the worst of it</span>'>>
<<set $tentaclePair.mode to 'her'>>
<<set $tentaclePair.outcome to setup.applyTentaclePairOutcome('her')>>
<<set $tentaclePair.resolved to true>>
<<goto "TentaclePair">>
<</link>>
<<link '<span class="action-label">Tear yourself out</span><span class="action-hint">she takes the rest of it</span>'>>
<<set $tentaclePair.mode to 'self'>>
<<set $tentaclePair.outcome to setup.applyTentaclePairOutcome('self')>>
<<set $tentaclePair.resolved to true>>
<<goto "TentaclePair">>
<</link>>
</div>
<<else>>
<div class="scene-prose"><<print setup.tentaclePairResolveProse(_ps.mode)>></div>
<<if _ps.outcome.playerLines and _ps.outcome.playerLines.length>>
<div class="bee-aftermath-narration">
<<for _plI, _pl range _ps.outcome.playerLines>>
<<print '<p class="aftermath-line aftermath-' + _pl.type + '">' + _pl.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="pair-her-aftermath">
<div class="pair-her-label"><<print $companion ? $companion.name : 'Her'>></div>
<<for _hlI, _hl range _ps.outcome.herLines>>
<<print '<p class="aftermath-line aftermath-' + _hl.type + '">' + _hl.text + '</p>'>>
<</for>>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Get up and keep moving</span>'>>
<<set $tentaclePair to null>>
<<set $tentacleScene to null>>
<<set $tentacleLoot to null>>
<<if _tentLoc eq 'outdoor'>>
<<goto "PlanetSurface">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
</div>
<</if>>
</div>
<<set _gMap to setup.getActiveMap()>>
<<set _gRoom to _gMap.rooms[_gMap.current]>>
<<set _gc to _gRoom.gate.color>>
<<set _gcHex to setup.KEYPAD_COLORS[_gc] or '#8893a8'>>
<<set _gcLabel to _gc.toUpperCase()>>
<<set _gHasCard to setup.hasKeycard(_gc)>>
<<set _gHack to setup.hasCrowbarEquipped()>>
<div class="gate-block" @style="'--gate-c:' + _gcHex + ';'">
<div class="gate-block-row">
<div class="gate-block-frame"><img src="Images/ui/keypad_reader.png" alt="keypad reader"></div>
<div class="gate-block-text">
<div class="gate-block-title">SEALED GATE</div>
<div class="gate-block-desc">A blast door, bolted from the far side. The reader beside it blinks <<print _gc>>, holding out for a keycard they'd never issue a slave like you.</div>
</div>
</div>
<div class="gate-block-links">
<<if _gHasCard>>
<div class="ship-action gate-link is-card"><<link `'<span class="action-label">Swipe the ' + _gcLabel + ' keycard</span><span class="action-hint">clean, instant, no risk</span>'`>><<run setup.facilityGateOpen()>><<goto "FacilityRoom">><</link>></div>
<<else>>
<div class="gate-link-off">No <<print _gcLabel>> keycard on you<span class="gate-link-off-hint">find the card, or pry the panel</span></div>
<</if>>
<<if _gHack>>
<div class="ship-action gate-link"><<link '<span class="action-label">Pry the panel off with the crowbar</span><span class="action-hint">splice the wires before it locks down</span>'>><<run setup.facilityGatePry()>><</link>></div>
<<else>>
<div class="gate-link-off">No crowbar to pry the panel<span class="gate-link-off-hint">buy one at a station, or find the card</span></div>
<</if>>
<div class="ship-action gate-link is-back"><<link '<span class="action-label">Step away from the keypad</span>'>><<goto "FacilityRoom">><</link>></div>
</div>
</div>
<<set _twScr to setup.sensorsScrambled()>>
<<set _twFixed to ($planet and $planet.towerFixed)>>
<<set _twBrick to ($planet and $planet.towerBricked)>>
<div class="gate-block tower-block" style="--gate-c:#7fd8c8;">
<div class="gate-block-row">
<div class="gate-block-frame"><img src="Images/ui/relay_tower.png" alt="relay tower"></div>
<div class="gate-block-text">
<div class="gate-block-title"><<if _twBrick>>PANEL FRIED<<elseif _twFixed>>REROUTED // HOLDING<<elseif _twScr>>UPLINK LOST<<else>>ALL CHANNELS GREEN<</if>></div>
<div class="gate-block-desc"><<if _twBrick>>There's still a burnt-copper smell coming off the routing board. You cooked it, and nothing on this rock can uncook it. The map stays blind until you leave.<<elseif _twFixed>>Your patch is holding. The dish found its uplink again and the map reads true. It'll last until you leave.<<elseif _twScr>>The routing table is scrambled garbage and the dish is pinging nothing. Every return your suit gets comes back UNKNOWN. The panel wants its MAC authentication rebuilt by hand, and the failsafe only lets you try once.<<else>>The dish turns its slow circle and the panel reads clean. Whatever this thing relays, it's relaying it fine without you.<</if>></div>
</div>
</div>
<div class="gate-block-links">
<<if _twScr and not _twBrick>>
<div class="ship-action gate-link"><<link '<span class="action-label">Breach the routing panel</span><span class="action-hint">one attempt. The clock runs the moment the board opens</span>'>><<run setup.openBreachOverlay()>><</link>></div>
<<else>>
<div class="gate-link-off"><<if _twBrick>>Routing panel dead<span class="gate-link-off-hint">it stays dead until you take off</span><<elseif _twFixed>>Nothing left to reroute<span class="gate-link-off-hint">your patch is holding</span><<else>>Nothing needs rerouting<span class="gate-link-off-hint">all channels green</span><</if>></div>
<</if>>
<div class="ship-action gate-link is-back"><<link '<span class="action-label">Step away from the tower</span>'>><<goto "PlanetSurface">><</link>></div>
</div>
</div>
<<set _hpLasso to setup.cargoHasItem('lasso')>>
<<set _hpBarn to setup.ensureBarn()>>
<<set _hpFull to ((_hpBarn.horses ? _hpBarn.horses.length : 0) gte (_hpBarn.stalls ? _hpBarn.stalls : 1))>>
<<set _hpHybrid to (setup.wildHorseType() === 'hybrid')>>
<div class="kappa-block is-horse horse-block">
<div class="kappa-block-row">
<div class="kappa-block-frame"><img @src="_hpHybrid ? 'Images/ui/barn/hybrid_idle.png' : 'Images/ui/barn/horse_idle_r.png'" alt="loose horse"></div>
<div class="kappa-block-text">
<div class="kappa-block-title">LOOSE STOCK</div>
<div class="kappa-block-desc"><<if _hpHybrid>>Something shaped like a girl is out on the open grass with a horse's ears and a horse's tail, grazing like she means it. She hasn't clocked you yet. Get downwind and you might drop a loop on her before she bolts.<<else>>A loose horse is out on the open grass, cropping at it, tail switching at flies. It hasn't clocked you yet. Get downwind and you might drop a loop on it before it bolts.<</if>></div>
</div>
</div>
<div class="kappa-block-links">
<<if _hpFull>>
<span class="kappa-block-disabled">Nowhere to put it<span class="kappa-block-disabled-hint">every stall you own is already full</span></span>
<<elseif not _hpLasso>>
<span class="kappa-block-disabled">No rope on you<span class="kappa-block-disabled-hint">the farmer sells lassos at the barn</span></span>
<<else>>
<div class="ship-action horse-act"><<link '<span class="action-label">Get the rope on it and hold on</span>'>><<run setup.openTamingOverlay()>><</link>></div>
<</if>>
<div class="ship-action horse-act"><<link '<span class="action-label">Leave it be</span>'>><<goto "PlanetSurface">><</link>></div>
</div>
</div><<if not $planet or not $planet.ruin>>
<<goto "PlanetSurface">>
<<else>>
<<set _map to $planet.ruin>>
<<set _room to _map.rooms[_map.current]>>
<<set _room.visited to true>>
<<run setup.setAmbient('base', 'Sounds/ambient/outdoor_scary.mp3', { volume: 0.32 })>>
<<run setup.stopAmbient('encounter')>>
<<roomImage `_room.img ? _room.img : 'altar/deepwood_path'`>>
<div class="ship-header">$planet.name — THE RUIN</div>
<<print setup.renderMiniMap(_map)>>
<div class="room-desc"><<print _room.desc>></div>
<div class="ship-actions">
<<if _room.ruinDoor>>
<div class="ship-action dir-facility">
<<link '<img class="action-icon" src="Images/ui/minimap/prayer.png" alt=""><span class="action-label">Push through the doorway</span><span class="action-hint">Into the shrine. The light is waiting</span>'>>
<<run setup.playSound('hatch_open', { volume: 0.5 })>>
<<run setup.ensureAltarCandles()>>
<<goto "AltarShrine">>
<</link>>
</div>
<</if>>
<<for _exDir, _exTarget range _room.exits>>
<<capture _exDir, _exTarget>>
<<set _tgt to _map.rooms[_exTarget]>>
<div class="ship-action">
<<link `'<span class="action-label"><span class="dir-arrow">' + setup.dirArrow(_exDir) + '</span> ' + setup.dirLabel(_exDir) + '</span><span class="action-hint">' + ((_tgt and _tgt.visited) ? "back through" : "further in") + '</span>'`>>
<<set _map.previousRoom to _map.current>>
<<set _map.current to _exTarget>>
<<run setup.playSound('step_grass', { volume: 0.45 })>>
<<goto "RuinGrounds">>
<</link>>
</div>
<</capture>>
<</for>>
<<if _room.id eq "r0">>
<div class="ship-action dir-start">
<<link '<img class="action-icon" src="Images/ui/minimap/forest_entrance.png" alt=""><span class="action-label">Leave the clearing</span><span class="action-hint">Back out onto the surface</span>'>><<set $planet.location to "outdoor">><<goto "PlanetSurface">><</link>>
</div>
<</if>>
</div>
<</if>><<if not $planet or not $planet.outdoor or not $planet.outdoor.altarRoomId>><<goto "PlanetSurface">><<else>>
<<run setup.setAmbient('base', ($altar and $altar.totalFed gte 40) ? 'Sounds/ambient/shrine_dead.mp3' : 'Sounds/ambient/shrine_magic.mp3', { volume: 0.42, fadeInMs: 1600 })>>
<<run setup.stopProximityAmbient()>>
<<if not $altar>><<set $altar to { totalFed: 0, gambles: 0, blessUntil: 0, met: false, pity: 0 }>><</if>>
<<if $altar.pity is undefined>><<set $altar.pity to 0>><</if>>
<<if not $planet.altarOffering>><<set $planet.altarOffering to []>><</if>>
<<set _aOff to ($planet.altarOffering || [])>>
<<run setup.ensureAltarCandles()>>
<<roomImage `'altar/altar_interior_' + ($planet.altarInterior || 1)`>>
<div class="ship-header">THE SHRINE</div>
<<if setup.altarBlessed()>>
<p class="action-narration is-tense">Her blessing is still in your blood.</p>
<</if>>
<div class="altar-rig">
<div class="alt-shelf"><<print setup.altarCandleRowHtml(false)>></div>
<div class="altar-tablet" data-altar-drop="1">
<div class="altar-tablet-emblem"><<print setup.altarEmblemHtml()>></div>
<div class="altar-tablet-inner">
<div class="altar-slots">
<<for _si to 0; _si lt 3; _si++>>
<<capture _si>>
<<if _aOff[_si]>>
<div class="altar-slot filled" @title="_aOff[_si].name">
<<link `'<img draggable="false" src="Images/items/' + _aOff[_si].id + '.png" alt=""><span class="altar-slot-x">take back</span>'`>>
<<run setup.altarTakeBack(_si)>><<goto "AltarShrine">>
<</link>>
</div>
<<else>>
<div class="altar-slot empty"></div>
<</if>>
<</capture>>
<</for>>
</div>
</div>
</div>
</div>
<div class="ship-actions">
<<if _aOff.length gte 1>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/prayer.png" alt=""><span class="action-label">Approach the statue</span><span class="action-hint">Give her the stone</span>'>>
<<run setup.openAltarOverlay()>>
<</link>>
</div>
<<else>>
<div class="ship-action is-spent">
<span class="action-label">Approach the statue</span><span class="action-hint">the stone is bare — lay something down first</span>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Step out of the shrine</span>'>><<if $planet and $planet.ruin>><<goto "RuinGrounds">><<else>><<goto "PlanetSurface">><</if>><</link>>
</div>
</div>
<</if>><div class="handbook">
<div class="handbook-title">INCIDENT 114: UNLISTED STRUCTURE, CLASS D</div>
<div class="handbook-body">
Crews on scrap contracts keep filing the same report. A ruin nobody surveyed and a statue nobody carved. The stone at its feet takes what you put on it.
Company position is that the structure isn't hazardous and recovery may continue. Chalk is stocked at every refuelling point. Draw your own conclusions about why we stock it.
<h3>Filed combinations</h3>
Copied off the wall markings by a surveyor who didn't come back for the second pass. Lay a set down together and the stone gives you one thing back. What it gives isn't recorded here, and the company has no plans to find out.
<<print setup.altarRecipeRowsHtml()>>
</div>
</div><<if not $kappaFight or not $kappaFight.active>>
The fight already ended. The kappa is gone or you are.
<br><br>
<<link "Back">><<goto "PlanetSurface">><</link>>
<<else>>
<<set _f to $kappaFight>>
<<set _kgender to _f.kappaGender or 'male'>>
<<set _idlePool to (_kgender eq 'female') ? 'kappa_idle_female' : 'kappa_idle_male'>>
<<set _last to _f.lastAction>>
<<set _armed to setup.kappaIsArmed(_f.weaponAtStart)>>
<<set _weaponName to (_f.weaponAtStart and setup.ITEMS[_f.weaponAtStart]) ? setup.ITEMS[_f.weaponAtStart].name : _f.weaponAtStart>>
<<set _telegraph to _f.telegraph>>
<<set _strikeBaseEnergy to (_armed ? setup.KAPPA_STRIKE_ENERGY_ARMED : setup.KAPPA_STRIKE_ENERGY_UNARMED)>>
<<set _strikeDrain to (_armed ? setup.kappaArmedStrikeDrain(_f.dish) : 1)>>
<<set _hasCucumberKF to false>>
<<for _kpci to 0; _kpci lt $ship.cargo.length; _kpci++>>
<<if $ship.cargo[_kpci] and $ship.cargo[_kpci].id eq 'cucumber'>>
<<set _hasCucumberKF to true>>
<<set _kpci to 999>>
<</if>>
<</for>>
<div class="bee-aggro-root is-kappa">
<div class="bee-aggro-title">A KAPPA STANDS IN THE WATER</div>
<div class="kappa-fight-subtitle">
<<if _kgender eq 'female'>>FEMALE<<else>>MALE<</if>>
<<if _armed>> · ARMED <strong><<print _weaponName>></strong><</if>>
</div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia(_idlePool))>>
</div>
<div class="kappa-dish">
<div class="kappa-dish-label">DISH ON ITS HEAD</div>
<div class="kappa-dish-row">
<<for _di to 0; _di lt 3; _di++>>
<<if _di lt _f.dish>>
<span class="kappa-dish-drop full"></span>
<<else>>
<span class="kappa-dish-drop empty"></span>
<</if>>
<</for>>
</div>
<div class="kappa-dish-hint">
<<if _f.dish gte 3>>Full. It's at full strength.
<<elseif _f.dish eq 2>>Tilted. Some water has spilled.
<<elseif _f.dish eq 1>>Mostly empty. One more bow and it's done.
<<else>>Dry. It's helpless.
<</if>>
</div>
</div>
<<if _last>>
<div class="kappa-fight-narration">
<<print _last.narration>>
</div>
<<else>>
<div class="kappa-fight-narration kappa-fight-narration-intro">
It's standing chest-deep in the water watching you, and the dish balanced on its head sloshes a little every time it breathes, and the locals all swear the dish is the trick, that if you can empty it out the kappa's done. Watch which part of you it's lining up for next.
</div>
<</if>>
</div>
<div class="kappa-telegraph">
<div class="kappa-telegraph-label"><<print setup.kappaTelegraphLabel(_telegraph)>></div>
</div>
<div class="kappa-actions">
<span class="kappa-action-btn">
<<link `'<span class="action-label">Strike</span>'`>>
<<set _outcome to setup.kappaResolveRound('strike')>>
<<run setup.openKappaSlapPopup(_outcome)>>
<<if _outcome and _outcome.fightOver>>
<<if _outcome.winner eq 'player'>><<goto "KappaWin">><<else>><<goto "KappaLoss">><</if>>
<<else>>
<<goto "KappaFight">>
<</if>>
<</link>>
</span>
<span class="kappa-action-btn">
<<link `'<span class="action-label">Brace</span>'`>>
<<set _outcome to setup.kappaResolveRound('brace')>>
<<if _outcome and _outcome.fightOver>>
<<if _outcome.winner eq 'player'>><<goto "KappaWin">><<else>><<goto "KappaLoss">><</if>>
<<else>>
<<goto "KappaFight">>
<</if>>
<</link>>
</span>
<<if _hasCucumberKF>>
<span class="kappa-action-btn kappa-action-bribe">
<<link '<span class="action-label">Offer the cucumber</span><span class="action-hint">Ends the fight. You walk away.</span>'>>
<<set _outcome to setup.kappaResolveRound('cucumber')>>
<<if _outcome and _outcome.winner eq 'cucumber'>>
<<set $kappaFight to null>>
<<set _kRoom to setup.getActiveMap().rooms[setup.getActiveMap().current]>>
<<if _kRoom>><<set _kRoom.kappaResolved to true>><</if>>
<<run setup.logBestiary('kappa', 'bribed')>>
<<set $useMessage to "The cucumber is gone, and the kappa with it.">>
<<tick 5>>
<<goto "PlanetSurface">>
<<else>>
<<goto "KappaFight">>
<</if>>
<</link>>
</span>
<</if>>
</div>
</div>
<</if>><<if not $kappaFight or not $kappaFight.active>>
The fight already wrapped. You're standing in mud.
<br><br>
<<link "Continue">><<goto "PlanetSurface">><</link>>
<<else>>
<<set _kgWin to $kappaFight.kappaGender or 'male'>>
<<set _scene to setup.composeKappaScene('win', _kgWin)>>
<<set $kappaScene to _scene>>
<<set _outcome to setup.applyKappaOutcome(_scene)>>
<<run setup.endKappaFight()>>
<div class="bee-aggro-root is-kappa">
<div class="bee-aggro-title">YOU WON</div>
<div class="scene-beat">
<<if _scene.media>>
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.media)>>
</div>
<</if>>
<div class="scene-prose"><<print setup.kappaSceneProse(_scene)>></div>
</div>
<<if _outcome.lines and _outcome.lines.length>>
<div class="bee-aftermath-narration">
<<for _lI, _line range _outcome.lines>>
<<print '<p class="aftermath-line aftermath-' + _line.type + '">' + _line.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Walk it off</span>'>>
<<set $kappaScene to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<</if>><<if not $kappaFight or not $kappaFight.active>>
You don't remember exactly what happened. You're on the bank.
<br><br>
<<link "Continue">><<goto "PlanetSurface">><</link>>
<<else>>
<<set _kgLoss to $kappaFight.kappaGender or 'male'>>
<<if $kappaScene and $kappaScene.outcome eq 'loss' and $kappaScene.outcomeLines>>
<<set _scene to $kappaScene>>
<<set _outcome to { lines: $kappaScene.outcomeLines }>>
<<else>>
<<set _scene to setup.composeKappaScene('loss', _kgLoss)>>
<<set _outcome to setup.applyKappaOutcome(_scene)>>
<<set _scene.outcomeLines to _outcome.lines>>
<<set $kappaScene to _scene>>
<</if>>
<<run setup.endKappaFight()>>
<div class="bee-aggro-root is-kappa">
<div class="bee-aggro-title">IT GOT YOU</div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<if _scene.sequence>>
<<for _qI, _qSrc range _scene.sequence>>
<<print setup.mediaTag(_qSrc)>>
<</for>>
<<elseif _scene.media>>
<<print setup.mediaTag(_scene.media)>>
<</if>>
</div>
<div class="scene-prose"><<print setup.kappaSceneProse(_scene)>></div>
</div>
<<if _outcome.lines and _outcome.lines.length>>
<div class="bee-aftermath-narration">
<<for _lI, _line range _outcome.lines>>
<<print '<p class="aftermath-line aftermath-' + _line.type + '">' + _line.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Crawl out of the water</span>'>>
<<set $kappaScene to null>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<</if>><<if not $wallSqueeze>>
The hole isn't where you remember leaving it, and somewhere along the way you must have slipped through it without registering you did.
<br><br>
<<link "Keep moving">><<goto "FacilityRoom">><</link>>
<<else>>
<<if $wallScene and $wallScene.branch and $wallScene.outcomeLines>>
<<set _scene to $wallScene>>
<<set _outcome to { lines: $wallScene.outcomeLines }>>
<<else>>
<<set _scene to setup.composeWallScene()>>
<<set _outcome to setup.applyWallOutcome(_scene)>>
<<set _scene.outcomeLines to _outcome.lines>>
<<set $wallScene to _scene>>
<</if>>
<div class="bee-aggro-root is-wall wall-stuck-shake">
<div class="bee-aggro-title">YOU GET STUCK HALFWAY</div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<if _scene.sequence>>
<<for _qI, _qSrc range _scene.sequence>>
<<print setup.mediaTag(_qSrc)>>
<</for>>
<<else>>
<<print setup.mediaTag(_scene.media)>>
<</if>>
</div>
<div class="scene-prose"><<print setup.wallSceneProse(_scene)>></div>
</div>
<<if _outcome.lines and _outcome.lines.length>>
<div class="bee-aftermath-narration">
<<for _lI, _line range _outcome.lines>>
<<print '<p class="aftermath-line aftermath-' + _line.type + '">' + _line.text + '</p>'>>
<</for>>
</div>
<</if>>
<div class="bee-aggro-end">
<<link '<span class="action-label">Work yourself loose into the locked room</span>'>>
<<run setup.clearSqueezeEdge($wallSqueeze.anchorId, $wallSqueeze.lockedId)>>
<<set $planet.indoor.current to $wallSqueeze.lockedId>>
<<set $wallScene to null>>
<<set $wallSqueeze to null>>
<<goto "FacilityRoom">>
<</link>>
</div>
</div>
<</if>><<silent>><<run setup.playSound('dread_warning', { volume: 0.95 })>><</silent>>
<div class="dread-warning-root wall-stuck-shake">
<div class="dread-warning-label">SOMETHING IS IN THE DARK WITH YOU</div>
<div class="dread-warning-prose">Behind you. Right now. You don't get to move first.</div>
</div>
<<timed 1.4s>>
<<goto "DreadEncounter">>
<</timed>><<if not $dreadScene>>
<<set $dreadScene to setup.composeDreadScene()>>
<<set $dreadScene.canRun to ($player.energy gte 15)>>
<<if $dreadScene.canRun>>
<<set $player.energy to Math.max(0, $player.energy - 15)>>
<<set $player.lust to Math.max($player.lust, 60)>>
<</if>>
<</if>>
<<set _scene to $dreadScene>>
<<set _runCost to 15>>
<<set _canRun to $dreadScene.canRun>>
<div class="dread-encounter-root">
<div class="dread-title">SOMETHING IN THE DARK</div>
<div class="scene-beat wall-stuck-shake">
<div class="scene-media-wrap">
<<if _scene.media>>
<<print _scene.media>>
<</if>>
</div>
<div class="scene-prose"><<print setup.dreadSceneProse(_scene)>></div>
</div>
<div class="bee-aftermath-narration">
<<if _canRun>>
<p class="aftermath-line aftermath-fatigue">You drag yourself off the floor with your legs not quite under you yet, and the rest of the dark waits in the corners while you find your footing.</p>
<p class="aftermath-line aftermath-body">It used you up worse than you want to admit out loud, and you're going to be feeling it for the rest of the run, a slow ache that sits in your hips and your throat in equal parts.</p>
<<else>>
<p class="aftermath-line aftermath-fatigue">You can't get back up off the floor because your knees won't take your weight, and the dark waits a second in the corners before it comes back for another pass at you.</p>
<p class="aftermath-line aftermath-gear">By the time you wake up at the ship your cargo is gone and the rest of the day went with it.</p>
<</if>>
</div>
<div class="bee-aggro-end">
<<if _canRun>>
<<link '<span class="action-label">Make a run for it</span>'>>
<<set $dreadScene to null>>
<<if $returnPassage neq "">>
<<set _next to $returnPassage>>
<<set $returnPassage to "">>
<<goto _next>>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>>
<<else>>
<<link '<span class="action-label">Wake up at the ship</span>'>>
<<run setup.dreadCollapseToShip()>>
<<set $dreadScene to null>>
<<set $returnPassage to "">>
<<goto "DreadShipWake">>
<</link>>
<</if>>
</div>
</div><<run setup.stopAmbient('encounter')>>
<<if not $oniScene>>
<<set $oniScene to setup.oniApplyEscape()>>
<</if>>
<<set _scene to $oniScene>>
<<set _pgWin to _scene.playerGender or 'male'>>
<<set _oniHe to (_pgWin eq 'female') ? 'he' : 'she'>>
<<set _oniHeCap to (_pgWin eq 'female') ? 'He' : 'She'>>
<<set _oniHis to (_pgWin eq 'female') ? 'his' : 'her'>>
<div class="bee-aggro-root is-oni">
<div class="bee-aggro-title">YOU TORE LOOSE</div>
<div class="scene-beat">
<div class="scene-prose">
You claw back up through the spiral one handhold at a time and the pressure in your skull lets go all at once, like a hand opening. Your eyes take a second to come back. When they do, the spot where <<print _oniHe>> was standing is empty, and there's no footsteps and no sound, just <<print _oniHis>> hum fading from somewhere further off than <<print _oniHe>> could've walked.
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-body">Your head is yours again, mostly. A sliver of that tune is still lodged in there and it itches.</p>
<p class="aftermath-line aftermath-fatigue"><<print setup.statProse("lust", 5)>></p>
<p class="aftermath-line aftermath-gear"><<print _oniHeCap>> didn't leave the planet. Something that far into your head doesn't give up, it goes somewhere and waits.</p>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Catch your breath and keep moving</span>'>>
<<set $oniScene to null>>
<<set $oniEncounter to null>>
<<if $planet.location eq "indoor">>
<<goto "FacilityRoom">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
</div><<run setup.stopAmbient('encounter')>>
<<if not $oniScene>>
<<set $oniScene to setup.oniApplyLoss()>>
<</if>>
<<set _scene to $oniScene>>
<<set _pgLoss to _scene.playerGender or 'male'>>
<<set _oniTitle to (_pgLoss eq 'female') ? "HE GOT IN" : "SHE GOT IN">>
<<set _oniDom to (_pgLoss eq 'female') ? 'He' : 'She'>>
<<set _oniDomP to (_pgLoss eq 'female') ? 'him' : 'her'>>
<div class="bee-aggro-root is-oni">
<div class="bee-aggro-title"><<print _oniTitle>></div>
<<if _scene.shattered>>
<p class="action-narration is-impact">THE MIRROR COMES APART IN YOUR HAND</p>
<p class="action-narration is-cold">The whole face lets go at once, and through the falling glass you can see her smile getting wider. She watched you reach for the trick and she let you finish reaching.</p>
<div class="scene-advance"><<linkreplace "Look up through the falling glass">>
<<include "OniLossScene">>
<</linkreplace>></div>
<<else>>
<<include "OniLossScene">>
<</if>>
</div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.media)>>
</div>
<div class="scene-prose">
<<if _pgLoss eq 'female'>>
You can't hold the struggle and he's in, and your body stops being yours about halfway through. You feel him walk you into position and you watch yourself do it from somewhere a step behind your own eyes. The rest you remember in pieces, and when he's done you're on the ground coming back to your own head one limb at a time, your insides full, your bag lighter, and him gone.
<<elseif _scene.mode eq 'peg'>>
You can't hold the struggle and she's in, and she puts you down on your back without touching you once.<<if _scene.plugYanked>> She hooks a finger under your plug and rips it out on the way in, and you hear it land somewhere near your bag.<</if>> What she does to your ass after that you feel from a step outside your own body, deep and patient and completely uninterested in whether you're ready. You come back to yourself face down with your hips still moving on their own, and she's already gone.
<<else>>
You can't hold the struggle and she's in, and the last thing you remember is your knees folding. You wake up on your back with your dick limp on your stomach and your own cum drying across your chest, and she rode you the whole time you were under. She's gone by the time you can move and your bag's lighter than it was.
<</if>>
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-fatigue"><<print _oniDom>> rode it out of you the whole way and you're not getting any of that back, a kind of taken that sits in your gut for the rest of the day.</p>
<p class="aftermath-line aftermath-body"><<print setup.statProseJoin([["hp",-15],["lust",25]])>></p>
<<if _scene.dropped and _scene.dropped.length gt 0>>
<<set _names to _scene.dropped.map(function(s){return s.name;}).join(', ')>>
<p class="aftermath-line aftermath-gear"><<print _oniDom>> took <<print _names>> on the way out.</p>
<</if>>
<<if _scene.shattered>>
<p class="aftermath-line aftermath-gear">The mirror is scrap now. Broken Mirror in your bag, worth whatever bent bronze is worth.</p>
<</if>>
<p class="aftermath-line aftermath-gear"><<print _oniDom>>'s still on this rock somewhere, humming.</p>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Pull yourself off the floor</span>'>>
<<set $oniScene to null>>
<<set $oniEncounter to null>>
<<if $planet.location eq "indoor">>
<<goto "FacilityRoom">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
<<if not $minotaurScene>><<set $minotaurScene to setup.minotaurComposeCaught()>><</if>>
<<if not $minotaurScene.result>>
<<set $minotaurScene.result to 'fucked'>>
<<set $minotaurScene.media to setup.pickMedia($minotaurScene.pool)>>
<<set $minotaurScene.outcome to setup.minotaurApplyCaughtOutcome(false)>>
<</if>>
<<set _sc to $minotaurScene>>
<div class="bee-aggro-root is-minotaur">
<div class="bee-aggro-title">HE GETS YOU</div>
<<if _sc.result eq 'escape'>>
<div class="scene-beat">
<div class="scene-media-wrap"><<print setup.mediaTag(setup.pickMedia(_sc.female ? 'ko_beat_female' : 'ko_beat_male'))>></div>
<div class="scene-prose">
You get a knee up between his weight and yours and buck, and it's just enough. The head slips off you and he stumbles a half-step trying to find it again. He doesn't get the chance. Frustrated, he rams you once out of spite instead, and a horn clips your temple and the lights go out. You come to slumped a few feet off with nothing of his in you, and he's already lost interest, back to pawing the ground.
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-fatigue">You kept him off you, but he put you on the floor doing it. Your head's ringing and half the day went with it.</p>
<p class="aftermath-line aftermath-body"><<print setup.statProseJoin([["hp", -_sc.outcome.hp],["lust", _sc.outcome.lust]])>></p>
<p class="aftermath-line aftermath-gear">He's still on this rock, and still has his horns.</p>
</div>
<div class="bee-aggro-end"><<link '<span class="action-label">Peel yourself off the ground</span>'>><<set _minoDest to ($minotaurScene and $minotaurScene.returnPassage) ? $minotaurScene.returnPassage : (($planet and $planet.location eq 'indoor') ? 'FacilityRoom' : 'PlanetSurface')>><<set $minotaurScene to null>><<goto _minoDest>><</link>></div>
<<else>>
<div class="scene-beat">
<div class="scene-media-wrap"><<print setup.mediaTag(_sc.media)>></div>
<div class="scene-prose">
<<if _sc.female>>
Your arms give and he folds you down, and there's no lining up left to do. He finds the wet and shoves to the root, and your whole body jolts up the surface with the first thrust. He fucks you like something he found, not someone, all weight and no rhythm you can brace for. He doesn't stop when he starts cumming. You come back to your own head a while later leaking down both thighs, your bag lighter, him already gone.
<<elseif _sc.plugYanked>>
Your arms give, and he gets a finger under the base of the plug and rips it out, and you hear it skitter off across the floor. Then he's in the space it left before your body has caught up to being empty. He splits you open on the first thrust and the second one goes deeper, and after that you lose the count. You come back to yourself face down with your ass gaping and your bag gone through.
<<else>>
Your arms give and he drives in with nothing in the way, and takes it like the invitation it isn't. The first thrust drives the air out of you and the ones after keep it out, deep and blunt and relentless, until your legs quit trying to hold anything. He fills you and keeps going, and you come back to yourself a while later with your ass ruined and half your bag missing.
<</if>>
</div>
</div>
<div class="scene-beat aftermath-image-beat"><div class="scene-media-wrap"><<print setup.mediaTag(setup.pickMedia(_sc.female ? 'ko_after_female' : 'ko_after_male'))>></div></div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-fatigue">He used you until he was done and walked off without a look back. It sits in your gut the rest of the day.</p>
<p class="aftermath-line aftermath-body"><<print setup.statProseJoin([["hp", -_sc.outcome.hp],["lust", _sc.outcome.lust]])>></p>
<<if _sc.plugYanked>>
<p class="aftermath-line aftermath-gear">He tore the <<print _sc.plugYanked>> out of you. It's gone.</p>
<</if>>
<<if _sc.outcome.dropped and _sc.outcome.dropped.length gt 0>>
<p class="aftermath-line aftermath-gear">Knocked loose in the mess: <<print _sc.outcome.dropped.map(function(s){return s.name;}).join(', ')>>.</p>
<</if>>
<p class="aftermath-line aftermath-gear">He's still on this rock, and you'll have to come past him again.</p>
</div>
<div class="bee-aggro-end"><<link '<span class="action-label">Get your legs back under you</span>'>><<set _minoDest to ($minotaurScene and $minotaurScene.returnPassage) ? $minotaurScene.returnPassage : (($planet and $planet.location eq 'indoor') ? 'FacilityRoom' : 'PlanetSurface')>><<set $minotaurScene to null>><<goto _minoDest>><</link>></div>
<</if>>
</div><<run setup.stopAmbient('encounter')>>
<<if not $oniScene>>
<<set $oniScene to setup.oniApplyDominate()>>
<</if>>
<<set _scene to $oniScene>>
<<set _pgD to _scene.playerGender or 'male'>>
<div class="bee-aggro-root is-oni">
<div class="bee-aggro-title">IT REFLECTS</div>
<<if _scene.mode eq 'fuck'>>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.hornGrab)>>
</div>
<div class="scene-prose">
The flash catches her square in the eyes and her own spiral comes back at her doubled, and her face goes slack halfway through the smile. You have a fistful of horn before she can blink it off, and she goes down to her knees the way you point her, mouth already open, humming that hypno tune of hers around your cock without noticing she's the one under now.
</div>
</div>
<div class="scene-advance"><<linkreplace "Put her where you want her">>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.media)>>
</div>
<div class="scene-prose">
You keep the horn in your grip and take her the rest of the way down, and she works with you the whole time, hips rolling back into every stroke because the reflection told her to want it. When you finish she stays where you put her, glassy-eyed and breathing hard, still humming that broken little tune into the dirt.
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-body">Your head's never felt this clear. Whatever she was pouring into your skull, you poured it back with interest.</p>
<p class="aftermath-line aftermath-reward"><<print setup.statProse("hp", 10)>> There's nothing left in you to want anything.</p>
<<if _scene.hornStatus eq 'taken'>>
<p class="aftermath-line aftermath-reward">The horn you were holding comes off at the base when she slumps, hollow inside and still warm, and the station market pays real money for these. +1 Demon Horn.</p>
<<elseif _scene.hornStatus eq 'left'>>
<p class="aftermath-line aftermath-fatigue">The horn comes off at the base when she slumps, but your bag is full, so you leave it on the ground next to her.</p>
<</if>>
<p class="aftermath-line aftermath-gear">She'll wake up and drag herself somewhere else on the map. They don't die from this. They remember it, though.</p>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Leave her humming in the dirt</span>'>>
<<set $oniScene to null>>
<<set $oniEncounter to null>>
<<if $planet.location eq "indoor">>
<<goto "FacilityRoom">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
<</linkreplace>></div>
<<elseif _scene.mode eq 'caged'>>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.media)>>
</div>
<div class="scene-prose">
The flash lands and her spiral folds back into her, and she drops to her knees in front of you waiting for orders you can't give the usual way, because the company steel between your legs doesn't unlock for a hypno win. So you take a horn in your fist, put her on the ground, and tell her to finish herself. She does it staring up at you the whole time, obedient and wet to the wrist, and the horn snaps off at the base right as she comes.
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-body">Watching her empty herself out on your say-so scratches something the cage usually keeps out of reach.</p>
<p class="aftermath-line aftermath-reward"><<print setup.statProse("hp", 10)>> There's nothing left in you to want anything.</p>
<<if _scene.hornStatus eq 'taken'>>
<p class="aftermath-line aftermath-reward">The horn is hollow inside and still warm, and the station market pays real money for these. +1 Demon Horn.</p>
<<elseif _scene.hornStatus eq 'left'>>
<p class="aftermath-line aftermath-fatigue">Your bag is full, so the horn stays on the ground next to her.</p>
<</if>>
<p class="aftermath-line aftermath-gear">She'll wake up and drag herself somewhere else on the map. They don't die from this.</p>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Leave her where she finished</span>'>>
<<set $oniScene to null>>
<<set $oniEncounter to null>>
<<if $planet.location eq "indoor">>
<<goto "FacilityRoom">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
<<else>>
<div class="scene-beat">
<div class="scene-media-wrap">
<<print setup.mediaTag(_scene.media)>>
</div>
<div class="scene-prose">
The flash catches him mid-stare and eight feet of oni goes down on his back like a dropped crate. His eyes are still spinning when you climb up on top of him, and whatever's left driving in there does exactly what you tell it to, which is lie there and take it. You ride him until your legs shake and he never once moves out of turn, and on the way off you plant a boot on his jaw and work a horn loose.
</div>
</div>
<div class="bee-aftermath-narration">
<p class="aftermath-line aftermath-body">Your head's never felt this clear. Whatever he was pouring into your skull, you poured it back with interest.</p>
<p class="aftermath-line aftermath-reward"><<print setup.statProse("hp", 10)>> There's nothing left in you to want anything.</p>
<<if _scene.hornStatus eq 'taken'>>
<p class="aftermath-line aftermath-reward">The horn is hollow inside and still warm, and the station market pays real money for these. +1 Demon Horn.</p>
<<elseif _scene.hornStatus eq 'left'>>
<p class="aftermath-line aftermath-fatigue">Your bag is full, so the horn stays on the ground next to him.</p>
<</if>>
<p class="aftermath-line aftermath-gear">He'll wake up and drag himself somewhere else on the map. They don't die from this.</p>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Climb off and keep moving</span>'>>
<<set $oniScene to null>>
<<set $oniEncounter to null>>
<<if $planet.location eq "indoor">>
<<goto "FacilityRoom">>
<<else>>
<<goto "PlanetSurface">>
<</if>>
<</link>>
</div>
<</if>>
</div>
<div class="npc-scene">
<div class="npc-scene-step">
<p class="action-narration is-cold">The mist turns from sweet to heavy in a couple of breaths. Your knees quit on you and the floor comes up before you can catch it.</p>
<p class="action-narration">*thud*</p>
<<if $bndScene>>
<p class="action-narration is-tense">The pink swirls shut over you. Somewhere in the last sliver of it, before everything goes, you'd swear you hear footsteps that aren't yours.</p>
<div class="scene-advance"><<link "Go under">><<goto "BoundUsed">><</link>></div>
<<else>>
<p class="action-narration is-tense">You come to slumped against the wall some time later, head pounding, the gas long since drifted off down the corridors. Your bag's untouched. Nothing feels wrong yet.</p>
<div class="scene-advance is-keep">
<<link "Drag yourself up">>
<<goto "FacilityRoom">>
<</link>>
</div>
<</if>>
</div>
</div>
<<if not $hangTrap or not $hangTrap.active>>
<<goto "FacilityRoom">>
<<else>>
<div class="hang-flip" id="hang-flip" @style="'--haze:' + (($hangTrap.haze) || 0).toFixed(2)">
<div class="hang-stage"><img class="hang-img" @src="$hangTrap.img" alt=""></div>
<div class="hang-cap">
<p class="action-narration is-impact">THE ROPE SNAPS TAUT.</p>
<p class="action-narration">It whips up around your ankles and the floor drops out from under you. The world swings hard, once, and then you're hanging upside down off a creaking line, turning slow. <<print setup.hangBodyLine()>> Your bag tips out and your gear scatters across the floor below you, out of reach.</p>
<p class="action-narration is-cold">Blood's already pooling behind your eyes. Get down before it puts you under.</p>
</div>
<div id="hang-ui"><<hangUI>></div>
</div>
<<done>><<run setup.hangApplyNudge()>><</done>>
<</if>><div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration is-impact">YOU GET A HAND ON THE KNOT.</p>
<p class="action-narration">One more swing throws enough slack into the line that you can claw the rope off your ankle. You drop the last few feet and hit the floor right side up, ears ringing, the blood crashing back down out of your skull. It takes a second before the room stops tilting.</p>
<<if $hangTrap and $hangTrap.keptRope>>
<p class="action-narration">You timed it clean, and when the line finally gave it tore right off whatever it was anchored to up in the dark. The whole coil came down with you. You wind it back around your fist on your way up. Good cord, and nobody's around to want it back.</p>
<<else>>
<p class="action-narration">The rope's still cinched into the mechanism overhead, frayed through where you sawed your ankle back and forth against it the whole time. Nothing left down here worth climbing back up for.</p>
<</if>>
<p class="action-narration is-cold">Your gear's scattered across the floor where it fell out of your bag. Grab it before you move on.</p>
<div class="scene-advance is-keep">
<<link "Pick yourself up">><<goto "FacilityRoom">><</link>>
</div>
</div></div>
<div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration is-cold">The blur closes in from the edges. Your arms stop pulling. The last thing you feel is the slow turn of the line and the weight of the blood behind your eyes, and then there's nothing.</p>
<p class="action-narration">*creak... creak...*</p>
<<if $bndScene>>
<div class="scene-advance"><<link "Go under">><<goto "BoundUsed">><</link>></div>
<<else>>
<p class="action-narration is-tense">You come to some time later, cut down and dumped on the floor, head splitting, the rope gone slack beside you. Your gear's still scattered where it fell. Whoever set the trap didn't come back to check it. Not this time.</p>
<div class="scene-advance is-keep">
<<link "Peel yourself off the floor">><<goto "FacilityRoom">><</link>>
</div>
<</if>>
</div></div>
<<if not $bndScene>>
<<goto "FacilityRoom">>
<<else>>
<<set _s to $bndScene>>
<div class="npc-scene"><div class="npc-scene-step">
<<if _s.step lt _s.visitors.length>>
<<print setup.bndBeatHtml(_s.step)>>
<div class="scene-advance"><<link "Slip back under">><<set $bndScene.step to $bndScene.step + 1>><<goto "BoundUsed">><</link>></div>
<<else>>
<<print setup.bndCarryHtml()>>
<div class="scene-advance"><<link "Lose the rest">><<goto "BoundWake">><</link>></div>
<</if>>
</div></div>
<</if>>
<<if not $bndScene>>
<<goto "FacilityRoom">>
<<else>>
<<run setup.bndApplyWake()>>
<<set _s to $bndScene>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<p class="action-narration is-cold">Cold floor against your cheek. You come back all at once this time, head pounding, mouth dry, and the room around you is one you've never seen. However long you were out, someone walked you here, dropped you, and left.</p>
<<if _s.source eq 'hang' and _s.hangDropped gt 0>>
<p class="action-narration">Your gear's not here. It's still scattered under the snare, wherever that's from wherever this is.</p>
<</if>>
<<if _s.compRescue>>
<p class="action-narration is-tense">Except you're not alone. Someone's crouched right there, and your whole body flinches against the rope before your eyes focus on who it is.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _s.compName>></span><span class="speech">There you are. I've been walking these halls for an hour... look at the state of you.</span></div>
<<if _s.compClip>>
<p class="action-narration">Hands on the rope, testing the knots. Then the hands stop, and you get looked at for a couple of seconds too long.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _s.compName>></span><span class="speech">Don't move. Not that you can.</span></div>
<div class="npc-scene-media"><<print setup.mediaTag(_s.compClip)>></div>
<p class="action-narration"><<print setup.bndCompLine()>></p>
<div class="npc-line is-comp"><span class="speaker"><<print _s.compName>></span><span class="speech">Okay. Okay... NOW I'll cut you loose. You tell nobody about this.</span></div>
<</if>>
<p class="action-narration">The rope comes off in long pulls, and blood crawls back into your hands like ants. <<if _s.gagAdded>>The gag someone strapped into your mouth gets worked loose too and dropped on your chest. Yours now, apparently.<</if>> You get hauled up by the arm and held there until your legs agree to it.</p>
<div class="scene-advance is-keep">
<<link "Get moving">><<set $bndScene to null>><<goto "FacilityRoom">><</link>>
</div>
<<elseif _s.freed>>
<p class="action-narration">The rope's already off. Cut, actually, sliced through and left in pieces around you, like whoever finished with you had one flash of conscience on the way out.<<if _s.gagAdded>> A ball gag sits on your chest where somebody tossed it. Yours now, apparently.<</if>></p>
<p class="action-narration is-tense">Everything below your waist aches in a way that tells the whole story without your memory's help. You sit there a minute anyway, putting the flashes in order, and then you stop trying.</p>
<div class="scene-advance is-keep">
<<link "Get moving">><<set $bndScene to null>><<goto "FacilityRoom">><</link>>
</div>
<<else>>
<p class="action-narration is-tense">You're still trussed. Ankles, wrists, elbows, all of it, and the floor's had you long enough that your whole side's gone numb.</p>
<<if _s.toy>>
<div class="npc-scene-media"><<print setup.mediaTag(_s.toy)>></div>
<p class="action-narration">And something's still in you, still going. It's been going. Your body gave up counting the peaks a while back and now it just shudders through them on a loop, wrung out and dripping and nowhere near allowed to stop.</p>
<</if>>
<<if _s.gagAdded>>
<p class="action-narration">Something's strapped in your mouth that wasn't there when you landed. It's now.</p>
<</if>>
<div class="scene-advance"><<linkreplace "Work yourself loose">>
<<set _keptWand to setup.bndWorkLoose()>>
<p class="action-narration">It takes a while. You find a seam in the floor plating and saw the wrist line against it until something frays, and the rest comes apart one stubborn knot at a time.<<if _s.toy>> The toy comes out last, and your whole body complains about the silence.<<if _keptWand>> The wand's still got some charge in it. You keep the wand.<</if>><</if>></p>
<div class="scene-advance is-keep">
<<link "Get moving">><<set $bndScene to null>><<goto "FacilityRoom">><</link>>
</div>
<</linkreplace>></div>
<</if>>
</div></div>
<</if>>
<<if $wardenCaught>>
<<goto "WardenCaught">>
<<else>>
<<run setup.chaseCaughtEnter()>>
<<set _cs to $chaseScene>>
<<run setup.playSound('monster_roar', { volume: 0.8 })>>
<div class="npc-scene wall-stuck-shake"><div class="npc-scene-step">
<<if $lockerFound>>
<<set _lcM to $lockerCaught>>
<<if $lockerFound eq 'smelled'>>
<p class="action-narration is-impact">IT COMES STRAIGHT TO YOUR DOOR.</p>
<p class="action-narration is-cold">It works down the row with its head up in the air and it doesn't slow at a single other locker, because you've been carrying that smell since before you climbed in here and a sheet of steel was never going to cover it. The door folds back off the frame with a fistful of your suit coming out through the gap after it.</p>
<<else>>
<p class="action-narration is-impact">IT HEARD YOU.</p>
<p class="action-narration is-cold">One breath gets away from you, too fast and far too loud, and the shape on the other side of the slats stops walking. It stands there long enough that you can hear your own pulse coming back off the steel an inch from your face. Then it takes the door off its runners in one pull and the light and the hand arrive together.</p>
<</if>>
<<if _lcM>>
<<set _lcName to (_lcM.mateName || 'the other suit')>>
<<set _lcSubj to ((_lcM.mateGender eq 'female') ? 'she' : 'he')>>
<<if _lcM.mate eq 'companion'>>
<p class="action-narration"><<print _lcName>> is out over the bench before the door has finished falling, and <<print _lcSubj>> stops once at the end of the row to look back, and then <<print _lcSubj>> keeps going.</p>
<<else>>
<p class="action-narration">The other suit goes out through the gap the second there's a gap to go out of, over the bench and gone down the row before the door has finished swinging.</p>
<</if>>
<</if>>
<<set $lockerFound to null>><<set $lockerCaught to null>>
<<elseif $lockerBolt>>
<p class="action-narration is-impact">YOU BURST OUT INTO ITS ARMS.</p>
<p class="action-narration is-cold">The door bangs off the frame and you get three steps of open floor before something closes around the back of your neck, almost gentle, like it had a hand out waiting the whole time.</p>
<<set $lockerBolt to null>>
<<else>>
<p class="action-narration is-impact">IT'S ON YOU BEFORE YOU FINISH TURNING.</p>
<</if>>
<<if _cs and _cs.clip>>
<div class="npc-scene-media"><<print setup.mediaTag(_cs.clip)>></div>
<</if>>
<p class="action-narration"><<print setup.chaseCaughtLine(_cs)>></p>
<p class="action-narration is-cold">It finishes with you and the weight lifts off, and the footsteps move away unhurried, like you were an errand. You stay down until you're sure the sound is gone.</p>
<div class="scene-advance is-keep">
<<link "Peel yourself off the floor">><<set _ccDest to ($planet and $planet.location eq 'outdoor') ? 'PlanetSurface' : 'FacilityRoom'>><<run setup.applyChaseCaught()>><<set $chaseScene to null>><<goto _ccDest>><</link>>
</div>
</div></div>
<</if>>
<<run setup.wardenCaughtEnter()>>
<<set _ws to $wardenScene>>
<<set _grab to _ws and _ws.act eq 'grab'>>
<<set _wLines to setup.wardenOutcomeLines(_ws)>>
<<run setup.playSound('slam', { volume: 0.7 })>>
<div class="bee-aggro-root is-warden wall-stuck-shake">
<div class="bee-aggro-title"><<if _grab>>YOU NEVER STOOD BACK UP<<else>>YOU LOOKED AWAY<</if>></div>
<div class="scene-beat">
<div class="scene-media-wrap">
<<if _ws and _ws.clip>><<print setup.mediaTag(_ws.clip)>><</if>>
</div>
<div class="scene-prose"><<print setup.wardenCaughtLine(_ws)>></div>
</div>
<div class="bee-aftermath-narration">
<<for _wI, _wLine range _wLines>>
<<print '<p class="aftermath-line aftermath-' + _wLine.type + '">' + _wLine.text + '</p>'>>
<</for>>
</div>
<div class="bee-aggro-end">
<<link '<span class="action-label">Peel yourself off the cold floor</span>'>><<run setup.applyWardenCaught()>><<goto "FacilityRoom">><</link>>
</div>
</div>
<<run setup.closeStrayDialog()>>
<<set _map to setup.getActiveMap()>>
<<if not setup.chaseActive()>>
<div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration is-cold">You count to twenty behind the stall door and nothing comes. The footsteps are gone, properly gone, swallowed somewhere back into the building.</p>
<div class="scene-advance is-keep">
<<link "Slip out">><<set $stallBeat to null>><<goto "FacilityRoom">><</link>>
</div>
</div></div>
<<else>>
<div class="npc-scene"><div class="npc-scene-step">
<<if not $stallBeat>>
<p class="action-narration is-tense">You pull the stall door shut and hold the latch with two fingers so it doesn't rattle. There's a hand's width of open tile under the door and your boots are sitting right in it, which is fine until something out there thinks to look down.</p>
<<if setup.stinkLevel() gte setup.FOUL_STINK>>
<p class="action-narration is-cold">You reek. Whatever comes through that door is going to be working off its nose, and a latch and a sheet of plywood do nothing at all about a smell.</p>
<</if>>
<<elseif $stallBeat eq 'swept'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_stall_monster_tease'))>></div>
<p class="action-narration is-impact">IT'S IN THE ROOM.</p>
<p class="action-narration">Feet stop outside your door. You watch them through the gap under the partition, and something heavy and wet swings down into view below the door edge and hangs there, inches from your boots, dripping onto the tile. You can hear it breathing through the door gap, so you stop doing it yourself, and after a long, long time the feet move on.</p>
<<elseif $stallBeat eq 'swept_up'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_stall_monster_tease'))>></div>
<p class="action-narration is-impact">IT'S IN THE ROOM.</p>
<p class="action-narration">You're folded on the lid with your knees under your chin and your thighs already burning, and the gap under the door shows you nothing but wet tile and a shadow crossing it. It stops at your door long enough for you to hear it drip. Then it moves down the row and starts working the next one instead.</p>
<<elseif $stallBeat eq 'near'>>
<p class="action-narration is-tense">Footsteps, close. A door somewhere in the next room slams open against its hinge and something exhales, long and low, like it can taste the air.</p>
<<if setup.stinkLevel() gte setup.FOUL_STINK>>
<p class="action-narration is-cold">It doesn't slow down at the doorway, it comes straight in like it already knows which door you're behind.</p>
<<elseif setup.playerIsMessy()>>
<p class="action-narration is-cold">You can smell yourself in here. Which means it can too.</p>
<</if>>
<<else>>
<p class="action-narration">The sounds move off through the building, uneven, doubling back. Nothing between you and them but a latch and the smell you brought in.</p>
<</if>>
<div class="scene-advance"><<link "Hold still">>
<<set $stallBeat to setup.stallHoldTick(false)>>
<<if $stallBeat eq 'found'>>
<<set $stallBeat to null>>
<<goto "ChaseCaught">>
<<else>>
<<goto "StallHide">>
<</if>>
<</link>></div>
<<set _feetOff to setup.stallFeetOff()>>
<<if not _feetOff>>
<div class="scene-advance"><<link "Get your boots up on the seat">>
<<set $stallBeat to setup.stallHoldTick(true)>>
<<if $stallBeat eq 'found'>>
<<set $stallBeat to null>>
<<goto "ChaseCaught">>
<<else>>
<<goto "StallHide">>
<</if>>
<</link>></div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Get your boots up on the seat</span><span class="sa-why"><<print _feetOff>></span></div>
<</if>>
<<set _stallExit to (setup.lockerHunterDist() lte 2) ? "Risk the open floor with it close" : "Slip out while it's rooms away">>
<div class="scene-advance"><<link _stallExit>>
<<set _sx to setup.hideExitRoll()>>
<<set $stallBeat to null>>
<<if _sx eq 'caught'>>
<<set $lockerBolt to true>>
<<goto "ChaseCaught">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>></div>
</div></div>
<</if>>
<<run setup.setAmbient('encounter', 'Sounds/ambient/locker_sweep.mp3', { volume: 0.5, fadeInMs: 600 })>>
<<run setup.closeStrayDialog()>>
<<set _map to setup.getActiveMap()>>
<<if not $lockerHide>>
<<set _mrole to setup.lockerEnterRoll()>>
<<set _mname to ((_mrole eq 'companion') and $companion) ? ($companion.name || 'your bunkmate') : setup.rollSlaveSerial()>>
<<set $lockerHide to { mate: _mrole, mateGender: setup.lockerOccupantGender(_mrole), mateName: _mname, groped: false, aroused: false, sexDone: false }>>
<<set $lockerBeat to 'entry'>>
<<set $lockerPeek to null>>
<</if>>
<<set _here to setup.lockerHunterHere()>>
<<set _matecomp to ($lockerHide.mate eq 'companion')>>
<<set _mateName to ($lockerHide.mateName) || ((_matecomp and $companion) ? ($companion.name || 'your companion') : 'the other suit')>>
<<set _mateFem to ($lockerHide.mateGender eq 'female')>>
<<set _mateHe to (_mateFem ? 'her' : 'him')>>
<<set _mateSubj to (_mateFem ? 'she' : 'he')>>
<<if not setup.chaseActive() and $lockerBeat neq 'voyeur' and $lockerBeat neq 'voyeur2' and $lockerBeat neq 'quiet' and $lockerBeat neq 'shove_caught' and $lockerBeat neq 'localsex'>>
<div class="npc-scene is-slave"><div class="npc-scene-step">
<p class="action-narration is-cold">You count sixty in the dark with your cheek against the vents and nothing moves out there. Whatever it was, the building has it again somewhere far away.</p>
<<if $lockerHide.mate>>
<p class="action-narration"><<print _mateName.toUpperFirst()>> peels off you one limb at a time, and the two of you step out of the box without looking at each other about it.</p>
<</if>>
<div class="scene-advance is-keep">
<<link "Push the door open">><<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>><<goto "FacilityRoom">><</link>>
</div>
</div></div>
<<else>>
<div class="npc-scene is-slave"><div class="npc-scene-step">
<<if $lockerBeat eq 'entry'>>
<p class="action-narration is-tense">You fold yourself into the locker and ease the door shut to a finger's width of dark. Slat-light lands across your face in stripes, and the whole world narrows to what you can see through the vents and how loud your own lungs have decided to be.</p>
<<if $lockerHide.mate eq 'companion'>>
<<set _mateStill to setup.lockerMateStill('companion', $lockerHide.mateGender)>>
<<if _mateStill>>
<div class="npc-scene-media"><<print setup.mediaTag(_mateStill)>></div>
<</if>>
<p class="action-narration is-tense">The locker is already warm. A hand clamps over your mouth before you can make the noise, and it's <<print _mateName>>, pressed flat against the back wall with nowhere to put you except against <<print _mateHe>>. The two of you arrange yourselves in a space built for one person's coat and stop existing.</p>
<<elseif $lockerHide.mate eq 'stranger'>>
<<set _mateStill to setup.lockerMateStill('stranger', $lockerHide.mateGender)>>
<<if _mateStill>>
<div class="npc-scene-media"><<print setup.mediaTag(_mateStill)>></div>
<</if>>
<p class="action-narration is-tense">The locker is already taken. Another suit, some slave off a run of <<print _mateFem ? 'her' : 'his'>> own, hisses <span class="whisper">there's no room, back up..!</span> at exactly the volume neither of you can afford, and then the far door slams somewhere and <<print _mateSubj>> grabs your collar and pulls you in against <<print _mateHe>> anyway.</p>
<</if>>
<<if setup.stinkLevel() gte setup.FOUL_STINK>>
<p class="action-narration is-cold">You can smell yourself in a box this small. It's not subtle. Steel isn't going to hide THAT.</p>
<<elseif setup.stinkLevel() gte 60>>
<p class="action-narration is-cold">The smell you brought in here with you fills the locker fast. If it gets close, the steel won't be doing much of the hiding.</p>
<</if>>
<<elseif $lockerBeat eq 'quiet'>>
<p class="action-narration is-impact">IT WAS RIGHT THERE.</p>
<p class="action-narration">The shape slides off the slats and the light comes back a stripe at a time, and the footsteps move away down the row like nothing in this room ever interested them. Your lungs reintroduce themselves to their job.<<if $lockerHide.mate>> Against you, <<print _mateName>> lets a breath go so slowly it takes the rest of the minute.<</if>></p>
<<if not setup.chaseActive()>>
<p class="action-narration is-cold">Somewhere out in the building the sound of it fades until the vents stop carrying it at all.</p>
<<else>>
<p class="action-narration is-cold">It's moving away, not gone. The box did its job. Staying in it now would just be waiting for it to come back around.</p>
<</if>>
<<elseif $lockerBeat eq 'heard'>>
<p class="action-narration is-impact">THE DOOR TO THIS ROOM JUST WENT.</p>
<p class="action-narration is-tense">You didn't see it come in, but you heard the hinge, and now there's weight moving across the floor of THIS room, slow, in no hurry, with a wet sound under it. The slats give you nothing but stripes of empty light.</p>
<<elseif $lockerBeat eq 'peek_here'>>
<p class="action-narration is-impact">IT'S IN THE ROOM.</p>
<p class="action-narration is-tense">You're pressed to the vents when it comes through the door, and this close the slats slice it into strips of slick hide and too many joints. It stops in the middle of the room and stands there, tasting the air, close enough that its breathing fogs the steel.</p>
<<elseif $lockerBeat eq 'peek'>>
<<if $lockerPeek and $lockerPeek.dist lte 1>>
<p class="action-narration is-tense">You lean into the vents and its back fills the next doorway, close enough to count the wet along its spine.<<if $lockerPeek.noticed>> The door flexes under your weight, one soft tick of metal, and the head turns. It heard the box.<</if>></p>
<<elseif $lockerPeek and $lockerPeek.dist lte 2>>
<p class="action-narration is-tense">Through the vents: a shape crossing the far light, two rooms out at most, moving in no hurry because nothing in here has ever needed to hurry.</p>
<<else>>
<p class="action-narration">You watch the slice of room the vents allow you for a long moment. Empty. Whatever's hunting is off in some other dark.</p>
<</if>>
<<elseif $lockerBeat eq 'localsex'>>
<<if $lockerSex.media>>
<div class="npc-scene-media"><<print setup.mediaTag($lockerSex.media)>></div>
<</if>>
<<if $lockerSex.role eq 'player_bottom'>>
<p class="action-narration">There was never a version of this where you got a say. <<print _mateName.toUpperFirst()>> has you turned and folded against the back wall before you've caught up, one hand clamped hard over your mouth, and in a box this size the only place to go is back onto him.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">mmh..! mm.. no.. s-stop, someone'll—</span></div>
<p class="action-narration">Every word goes straight into his palm and dies there. He works into you slow and deep to keep the sound down, and by the end you're biting his hand to stay quiet and you've stopped being sure whether it's to keep the thing outside from hearing or just to have something to bite.</p>
<<elseif $lockerSex.role eq 'player_top'>>
<p class="action-narration">She's already turned and angled before you've decided anything, and the space makes the rest of the choice for you. You clap a hand over her mouth and push in, and she goes rigid and loud against your palm.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _mateName>></span><span class="speech">mmph..! no, no, they'll hear, st—</span></div>
<p class="action-narration">The word comes apart against your fingers into something low and shaking, and she's shoving back onto you as hard as she's telling you not to. Both of you swallow every sound, because loud is how you end up on the floor of this room instead of hidden in it.</p>
<<elseif $lockerSex.role eq 'mate_rides'>>
<p class="action-narration">There's no room in here for her to get down and she does it anyway, shoulders scraping both walls on the way. She has your suit open and her mouth busy before you've agreed to any of it.</p>
<p class="action-narration is-cold">*slurrp* *sluuuurp*</p>
<div class="npc-line is-slave"><span class="speaker"><<print _mateName>></span><span class="speech">mmh.. mmph..</span></div>
<p class="action-narration">Every wet sound she makes goes straight up the row and comes back off the far lockers twice as loud. You get a hand into her hair and hold her still and make her do the quiet version of it, and she looks up at you the entire time like she's waiting to be told she's being too loud.</p>
<p class="action-narration">Then she comes off you with a pop that carries further than either of you wants, and she climbs up your body in the dark and puts you inside her. She rides you slow because slow is quiet, with one hand pinning your chest to keep you under her, and the two of you finish like that while the whole row ticks every time her back hits the door.</p>
<<elseif $lockerSex.role eq 'mutual_f'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('lck_hide_grope'))>></div>
<p class="action-narration">There's nowhere for your hands to go that isn't her, so you stop pretending there is. Your palm slides where the space forces it and stays because nobody stops it, and she bites down on your shoulder to keep it in.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _mateName>></span><span class="speech">mmh.. mm..</span></div>
<p class="action-narration">The sound stays hot and muffled against your skin, the two of you working each other quiet in the dark.</p>
<<else>>
<p class="action-narration">There's nowhere for your hands to go that isn't him, so you stop pretending there is. He bites down on nothing to stay quiet.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _mateName>></span><span class="speech">nngh..</span></div>
<p class="action-narration">One slips out into your neck before he catches it. The box gets warmer and tighter, and neither of you says a word about it while you take turns keeping the other one silent.</p>
<</if>>
<p class="action-narration is-cold">It took a while. If that thing was anywhere near this row, it heard something.</p>
<<elseif $lockerBeat eq 'shove_caught'>>
<p class="action-narration is-impact">YOU PUT THEM IN ITS PATH.</p>
<<if $lockerShove.clip>>
<div class="npc-scene-media"><<print setup.mediaTag($lockerShove.clip)>></div>
<</if>>
<p class="action-narration">You get both hands on <<print _mateHe>> and shove, and the door bangs and <<print _mateName>> stumbles out into the open right as the dark comes around the corner. There's a wet sound of something deciding, and then the noise of it isn't your problem anymore. It's <<print _mateFem ? 'hers' : 'his'>>. You keep your eye to the slats until it stops, and everything hunting this row turns that way, away from your box.</p>
<<elseif $lockerBeat eq 'voyeur'>>
<p class="action-narration is-impact">SOMEBODY ELSE DIDN'T MAKE IT.</p>
<div class="npc-scene-media"><<print setup.mediaTag($lockerVoyeur.clip)>></div>
<p class="action-narration">Through the vents you watch another suit get caught in the open, and the dark doesn't do it quietly. Whatever has hold of them muffles most of it, but not all, <span class="whisper">nngh.. mmPH.. no no no..</span> wet and choked and carrying down the tile. The sound rolls through the building and everything hunting in it turns that way, away from your row, and you stay at the slats with your jaw clamped shut.</p>
<<elseif $lockerBeat eq 'voyeur2'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia($lockerVoyeur.male ? 'lck_voyeur_m' : 'lck_voyeur_f'))>></div>
<p class="action-narration">It goes on. You watch all of it through the stripes, and your own breathing does something you're not proud of, and by the time the noise finally moves off down the corridor the room outside your vents is empty again.</p>
<<elseif $lockerBeat eq 'peek_sex'>>
<div class="npc-scene-media"><<print setup.mediaTag($lockerPeekSex.clip)>></div>
<p class="action-narration">A couple of rows down, somebody didn't get the memo about staying quiet. Through the stripes of light the vents allow you can't see all of it, just enough, skin moving on skin and a wet rhythm under it, and whoever they're they've decided the dark is somewhere else and worth the gamble. You watch because looking away means moving, and somewhere in there you stop listening for the corridor.</p>
<p class="action-narration is-cold">The thing hunting the building is still out there somewhere. This didn't change that. It just made the box a little harder to stay quiet in.</p>
<<elseif $lockerBeat eq 'circling'>>
<p class="action-narration is-tense">Time crawls and it won't leave. You listen to it work the rooms around this one, doors going over, that wet breathing passing close and then away and then close again, patient as a tide.</p>
<<if setup.playerIsMessy()>>
<p class="action-narration is-cold">You can smell yourself in here. That's probably why it won't leave.</p>
<</if>>
<<elseif $lockerBeat eq 'safe'>>
<p class="action-narration">The sounds thin out room by room until they're somewhere on the far side of the building. That's as much of a head start as this place is going to give you.</p>
<<elseif $lockerBeat eq 'shove_fled'>>
<p class="action-narration">You get a shoulder into the other suit and they take the hint, spilling out of the box with a hiss and vanishing down the row the other way. The door swings shut and it's just you and the dark again, the whole locker yours now.</p>
<<else>>
<p class="action-narration">The sounds are somewhere off in the building, uneven, doubling back. It hasn't got a line on this room. Yet.</p>
<</if>>
<<if $lockerBeat eq 'voyeur'>>
<div class="scene-advance"><<link "Keep watching">>
<<set $lockerBeat to 'voyeur2'>>
<<run setup.advanceMinutes(4)>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 10)>>
<<goto "LockerHide">>
<</link>></div>
<div class="scene-advance"><<link "Slip out while they're distracted">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<goto "FacilityRoom">>
<</link>></div>
<<elseif $lockerBeat eq 'voyeur2'>>
<div class="scene-advance"><<link "Slip out while they're distracted">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<goto "FacilityRoom">>
<</link>></div>
<<elseif $lockerBeat eq 'peek_sex'>>
<div class="scene-advance"><<link "Keep watching a moment longer">>
<<run setup.advanceMinutes(3)>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 8)>>
<<set $lockerBeat to null>><<set $lockerPeekSex to null>>
<<goto "LockerHide">>
<</link>></div>
<div class="scene-advance"><<link "Tear your eyes off it and stay still">>
<<set $lockerBeat to null>><<set $lockerPeekSex to null>>
<<goto "LockerHide">>
<</link>></div>
<<elseif $lockerBeat eq 'shove_caught'>>
<div class="scene-advance"><<link "Slip out while they're distracted">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>><<set $lockerShove to null>>
<<goto "FacilityRoom">>
<</link>></div>
<<elseif $lockerBeat eq 'localsex'>>
<div class="scene-advance"><<link "Catch your breath and listen">>
<<set $lockerBeat to null>><<set $lockerSex to null>>
<<goto "LockerHide">>
<</link>></div>
<<elseif $lockerBeat eq 'quiet'>>
<div class="scene-advance"><<link "Step out while its back is turned">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<goto "FacilityRoom">>
<</link>></div>
<<elseif $lockerBeat eq 'safe'>>
<div class="scene-advance"><<link "Make a run for it">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<goto "FacilityRoom">>
<</link>></div>
<<elseif _here>>
<div class="scene-advance"><<link "Hold your breath">>
<<run setup.triggerBreathHold()>>
<</link>></div>
<div class="scene-advance"><<link "Burst out and run">>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<set $lockerBolt to true>>
<<goto "ChaseCaught">>
<</link>></div>
<<else>>
<div class="scene-advance"><<link "Wait it out">>
<<set _t to setup.lockerWaitOut()>>
<<if _t eq 'found'>>
<<run setup.lockerCarryOccupant('smelled')>>
<<set $lockerBeat to null>><<set $lockerHide to null>>
<<goto "ChaseCaught">>
<<elseif _t eq 'inroom'>>
<<set $lockerBeat to 'heard'>>
<<goto "LockerHide">>
<<elseif _t eq 'gone'>>
<<set $lockerBeat to null>>
<<goto "LockerHide">>
<<else>>
<<set $lockerBeat to _t>>
<<goto "LockerHide">>
<</if>>
<</link>></div>
<div class="scene-advance"><<link "Peek through the vents">>
<<set _t to setup.lockerWorldTick(1)>>
<<if _t eq 'found'>>
<<run setup.lockerCarryOccupant('smelled')>>
<<set $lockerBeat to null>><<set $lockerHide to null>>
<<goto "ChaseCaught">>
<<elseif _t eq 'inroom'>>
<<set $lockerBeat to 'peek_here'>>
<<goto "LockerHide">>
<<elseif _t eq 'gone'>>
<<set $lockerBeat to null>>
<<goto "LockerHide">>
<<else>>
<<set $lockerPeek to setup.lockerPeekInfo()>>
<<if $lockerPeek.noticed>>
<<set $lockerHide.spotted to true>>
<</if>>
<<set _voy to ($lockerPeek.dist gte 3) ? setup.lockerVoyeurRoll() : null>>
<<set _psex to (not _voy and $lockerPeek.dist gte 3) ? setup.lockerPeekSexRoll() : null>>
<<if _voy>>
<<set $lockerVoyeur to _voy>>
<<set $lockerBeat to 'voyeur'>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 8)>>
<<elseif _psex>>
<<set $lockerPeekSex to _psex>>
<<set $lockerBeat to 'peek_sex'>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 6)>>
<<else>>
<<set $lockerBeat to 'peek'>>
<</if>>
<<goto "LockerHide">>
<</if>>
<</link>></div>
<<if $lockerHide.mate and not $lockerHide.sexDone>>
<div class="scene-advance"><<link "Shove them out into the open">>
<<set _sh to setup.lockerShoveOut()>>
<<if _sh.result eq 'caught_them'>>
<<set $lockerShove to _sh>>
<<set $lockerBeat to 'shove_caught'>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 6)>>
<<goto "LockerHide">>
<<else>>
<<set $lockerHide.mate to null>>
<<set $lockerBeat to 'shove_fled'>>
<<goto "LockerHide">>
<</if>>
<</link>></div>
<div class="scene-advance"><<link "Take advantage of the dark">>
<<set $lockerHide.sexDone to true>>
<<set $lockerHide.aroused to true>>
<<set $lockerSex to setup.lockerSexScene()>>
<<run State.variables.player.lust = Math.min(100, (State.variables.player.lust || 0) + 14)>>
<<if $lockerHide.mate eq 'companion' and $companion>>
<<run State.variables.companion.lust = Math.min(100, (State.variables.companion.lust || 0) + 12)>>
<</if>>
<<run setup.advanceMinutes(5)>>
<<run setup.lockerSexNoise()>>
<<if setup.tickChase>><<run setup.tickChase({ hidden: true })>><<run setup.tickChase({ hidden: true })>><</if>>
<<set $lockerBeat to 'localsex'>>
<<goto "LockerHide">>
<</link>></div>
<</if>>
<<set _exitLabel to (setup.lockerHunterDist() lte 2) ? "Risk the open floor with it close" : "Slip out while it's rooms away">>
<div class="scene-advance"><<link _exitLabel>>
<<set _ex to setup.hideExitRoll()>>
<<set $lockerBeat to null>><<set $lockerPeek to null>><<set $lockerHide to null>>
<<if _ex eq 'caught'>>
<<set $lockerBolt to true>>
<<goto "ChaseCaught">>
<<else>>
<<goto "FacilityRoom">>
<</if>>
<</link>></div>
<</if>>
</div></div>
<</if>>
<<set _ev to setup.rollEvent('shower', {})>>
<<if _ev>><<run _ev.apply()>><</if>>
<<set _relief to (_ev ? { kind: 'wash' } : setup.showerReliefPick())>>
<<set _female to ($body and $body.gender) eq 'female'>>
<<run setup.showerClean(_relief.kind eq 'toy' or _relief.kind eq 'hand')>>
<div class="npc-scene"><div class="npc-scene-step">
<p class="action-narration">The tub's older than the company and the curtain has one job left in it, but the head still runs hot if you let it argue about it first. You strip out of the suit and stand in the water, watching what comes off you spiral down the drain until the water gives up carrying color.</p>
<<if _relief.kind eq 'toy' and _relief.id eq 'dildo'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">The dildo comes out of the bag before you've finished arguing with yourself about it, and you end up riding it right there on the wet tile with a hand braced on the tub rim, grinding down onto it until the knot you carried in here finally lets go.<<if _relief.last>> That was the last real buzz left in it, too.<</if>></p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'toy' and _relief.id eq 'fleshlight'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">Nobody's here to see it, so the fleshlight comes out, and you lean into the tile and fuck it while the water hammers your back, and by the end your legs are shaking and the drain has already swallowed the evidence.<<if _relief.last>> The sleeve's about had it after that one.<</if>></p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'hand' and _female>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">The bag's got nothing to offer and the water only got you halfway there, so you sit yourself down dripping with your legs open and let your fingers handle the rest, and the shaking takes its time letting go of you.</p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'hand'>>
<div class="npc-scene-media"><<print setup.mediaTag(_relief.clip)>></div>
<p class="action-narration">There's nothing in the bag worth using, so you handle it the old way, leaned into the tile with the spray on your neck, and whatever comes off you is gone down the drain before you've opened your eyes again.</p>
<<run State.variables.player.lust = 0>>
<<elseif _relief.kind eq 'denied'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_m_shower_rear'))>></div>
<p class="action-narration">You're strung tight and the cage couldn't care less. Everything in the bag wants the one place that's locked. You wash around the bars twice, slower than the job needs, and it helps about as much as reading the serial number off the lock.</p>
<<elseif _female>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('bth_solo_shower_female'))>></div>
<p class="action-narration">You soap everything twice and come out of it with your legs actually under you again. It's the first time in days your skin has felt like it belongs to you.</p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<<elseif ($body.chest gte 2)>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(($player.gear and $player.gear.plug) ? 'bth_m_plug_shower' : 'bth_m_shower_rear'))>></div>
<p class="action-narration">You scrub down fast and let the steam work at your shoulders until they come down from around your ears, and you walk out feeling like a body again instead of the thing that hauls one around.</p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(($player.gear and $player.gear.plug) ? 'bth_m_plug_shower' : (setup.isCaged() ? 'bth_m_shower_rear' : 'bth_solo_shower_male')))>></div>
<p class="action-narration">You scrub down fast and rinse twice, and then you stay in the heat a while longer than the job needed, because hot water on a scrap planet isn't something you walk away from early.<<if $player.gear and $player.gear.plug>> The plug stays in for all of it, jeweled end catching the water, because taking it out in here felt like more of a decision than leaving it.<</if>></p>
<<run State.variables.player.lust = Math.max(0, (State.variables.player.lust || 0) - 10)>>
<</if>>
<<if _ev>>
<p class="action-narration is-tense">Somewhere past the curtain a door eases shut, too slow to be the draft.</p>
<div class="scene-advance"><<link "Listen">><<goto "ShowerWalkIn">><</link>></div>
<<else>>
<div class="scene-advance is-keep">
<<link "Suit back up">><<goto "FacilityRoom">><</link>>
</div>
<</if>>
</div></div>
<<set _ws to $showerScene>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<<if _ws and _ws.companion>>
<p class="action-narration is-tense">Then the curtain moves, and it's not the wind.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _ws.name>></span><span class="speech">There you are. You didn't say the water still ran in this dump... budge over.</span></div>
<<else>>
<p class="action-narration is-tense">Then the air moves behind you, and a shadow crosses the tile that your body registers before your head does.</p>
<</if>>
<div class="scene-advance"><<linkreplace "Turn around">>
<<if _ws and _ws.clip>>
<div class="npc-scene-media"><<print setup.mediaTag(_ws.clip)>></div>
<</if>>
<p class="action-narration"><<print (_ws and _ws.line) or "Someone joins you under the water without asking, and the shower stops being yours.">></p>
<<if _ws and _ws.act eq 'ffcomp'>>
<div id="ff-escalate">
<<if ($player.lust gte 60) or ($companion and ($companion.lust or 0) gte 60)>>
<div class="scene-advance"><<link "Soap stops being the point">><<replace "#ff-escalate">>
<div class="npc-scene-media"><<print setup.mediaTag($showerScene.escClip)>></div>
<p class="action-narration"><<print $showerScene.escLine>></p>
<<run (function(){ var sv = State.variables, c = sv.companion; sv.showerScene.act = 'hj'; if (c) c.lust = Math.min(100, (c.lust || 0) + 15); if (typeof setup.advanceMinutes === 'function') setup.advanceMinutes(15); })()>>
<</replace>><</link>></div>
<<else>>
<div class="scene-advance bazaar-soon">Soap stops being the point <span class="action-hint">you're both still too spent for that</span></div>
<</if>>
</div>
<</if>>
<<if _ws and _ws.companion and _ws.act eq 'ffcomp'>>
<div class="npc-line is-comp"><span class="speaker"><<print _ws.name>></span><span class="speech">See? Crew hygiene. Very professional operation we run here.</span></div>
<<elseif _ws and _ws.companion>>
<div class="npc-line is-comp"><span class="speaker"><<print _ws.name>></span><span class="speech">Mm. You owe me one. Or three.</span></div>
<</if>>
<div class="scene-advance is-keep">
<<link "Rinse off. Again.">>
<<set _wsBack to ($showerScene and $showerScene.back) or "FacilityRoom">>
<<run (function(){
var sv = State.variables, ws = sv.showerScene;
sv.player.lust = (ws && ws.act === 'hj') ? 0 : Math.min(100, (sv.player.lust || 0) + 20);
if (typeof setup.advanceMinutes === 'function') setup.advanceMinutes(15);
sv.showerScene = null;
})()>>
<<goto _wsBack>>
<</link>>
</div>
<</linkreplace>></div>
</div></div>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.4 })>>
<<run setup.stopAmbient('encounter')>>
<<run setup.stopAmbient('scan')>>
<div class="ship-header">YOU WAKE UP</div>
<<if $ship.upgraded>><<roomImage "ship_bedroom">><<else>><<roomImage "ship_interior">><</if>>
<div class="ship-desc">
The bunk's vibrating under you in the slow way the ship does when it's running on autopilot. You don't remember the climb. Last thing you have is the dark closing in over you and something on your back, and then nothing for a while.
The terminal's flickering through the post-extraction sequence on its own. Auto-recall. The company runs the protocol on every suit whose vitals cross the line, less a rescue than an inventory check, and the ship pulled itself up out of atmosphere with you on the bunk while you were still gone.
Your bag is empty. Whatever was in it's on the floor of the room you collapsed in, and that room is half a star system behind you now. The cabin smells like coolant and old sweat. Your head is heavier than it was this morning.
</div>
<<if $time and $time.day>>
<div class="warning">Auto-recall logged. Today is day $time.day. Cargo lost in transit.</div>
<</if>>
<div class="ship-actions">
<div class="ship-action">
<<if $ship.upgraded>>
<<link '<span class="action-label">Sit up</span><span class="action-hint">Out of the bunk</span>'>><<goto "SleepingQuarters">><</link>>
<<else>>
<<link '<span class="action-label">Sit up</span><span class="action-hint">Back to ship controls</span>'>><<goto "Ship">><</link>>
<</if>>
</div>
</div><<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.4 })>>
<<run setup.stopAmbient('scan')>>
<<run setup.stopAmbient('encounter')>>
<div class="ship-header">SLEEP</div>
<<if $ship.upgraded>>
<<roomImage "ship_bedroom">>
<</if>>
<<if not setup.canSleepNow()>>
It's not late enough to bed down for the night. If you're dragging you can nap to take the edge off, but you won't sleep through to morning until the day's later on.
<br><br>
<<if $ship.upgraded>><<link "Get up">><<goto "SleepingQuarters">><</link>><<else>><<link "Get up">><<goto "Ship">><</link>><</if>>
<<else>>
<<if setup.napParanoia() gte setup.NAP_PARANOIA_CAP>>
You drop onto the bunk wired and twitchy, running on catnaps for too long, and it takes a while for the ship's hum to actually pull you under. When you finally go, you go deep, a full eight hours before your body lets you back up.
<<else>>
You drop onto the bunk and the thin mattress doesn't hide the metal frame underneath, and the ship hums quiet around you while the fuel gauge glows soft on the wall over your head.
<</if>>
<<set $player.energy to $player.maxEnergy>>
<<run setup.slimeSealForRest()>>
<<run setup.sleepToMorning()>>
<<run setup.slimeEndRest()>>
<<run setup.maybeSleepFemTransition()>>
<<if $ship.landed and not $ship.docked and not $ship.hatchLocked>>
<<run setup.spawnIntruder()>>
<<if $intruder>>
<<if setup.intruderTargetsCompanion()>>
<<goto "CompanionIntruder">>
<<else>>
<<goto "WetoleIntruder">>
<</if>>
<</if>>
<</if>>
<<run setup.autoSave()>>
Energy back to full.
<br><br>
<<if $pendingFemTransition>>
<<link "Wake up">><<goto "FemTransition">><</link>>
<<elseif $ship.upgraded>>
<<link "Wake up">><<goto "SleepingQuarters">><</link>>
<<else>>
<<link "Wake up">><<goto "Ship">><</link>>
<</if>>
<</if>>
<<set _dir to $pendingFemTransition>>
<<set _ftImgs to ['Images/ui/fem_transition_1.jpg', 'Images/ui/fem_transition_2.jpg', 'Images/ui/fem_transition_3.jpg']>>
<<set _ftPick to _ftImgs[Math.floor(Math.random() * _ftImgs.length)]>>
<div class="ship-header">SOMETHING'S DIFFERENT</div>
<<if _dir is 'male'>>
<div class="bc-item-scene">
<div class="bc-item-scene-text">
<p class="action-narration is-cold">You wake up to the bunk light on and the ship hum where it always is, and the first thing you do is reach down under the sheet.</p>
<p>It's back. Heavy and warm against your thigh, balls and all, like it never left. Your hips sit narrower on the mattress and your chest has gone flat again. The soft that had been creeping into you pulled back out while you slept.</p>
<p>You stopped feeding it. The body took the hint and went back the way it came. For now.</p>
</div>
</div>
<div class="ship-actions">
<div class="ship-action">
<<if $ship.upgraded>>
<<link '<span class="action-label">Straighten up</span><span class="action-hint">Get out of bed</span>'>>
<<run setup.completeMascTransition()>>
<<goto "SleepingQuarters">>
<</link>>
<<else>>
<<link '<span class="action-label">Straighten up</span><span class="action-hint">Get out of bed</span>'>>
<<run setup.completeMascTransition()>>
<<goto "Ship">>
<</link>>
<</if>>
</div>
</div>
<<else>>
<div class="bc-item-scene">
<div class="bc-item-scene-media"><img @src="_ftPick" alt="look down"></div>
<div class="bc-item-scene-text">
<p class="action-narration is-cold">You wake up to the bunk light on and the ship hum where it always is, and the first thing you do is look down at yourself under the sheet.</p>
<p>Where your cock used to be there's nothing. A slit, maybe. A seam. Something soft and already damp against the inside of your thigh. Your balls are gone. Your hips sit different on the mattress. Everything else sits different.</p>
<p>You knew. The last few days kept telling you. Knowing didn't help.</p>
</div>
</div>
<div class="ship-actions">
<div class="ship-action">
<<if $ship.upgraded>>
<<link '<span class="action-label">Straighten up</span><span class="action-hint">Get out of bed</span>'>>
<<run setup.completeFemTransition()>>
<<goto "SleepingQuarters">>
<</link>>
<<else>>
<<link '<span class="action-label">Straighten up</span><span class="action-hint">Get out of bed</span>'>>
<<run setup.completeFemTransition()>>
<<goto "Ship">>
<</link>>
<</if>>
</div>
</div>
<</if>>
<<set _pdCrew to $_collapseCrewed>>
<<set _pdWhy to $_collapseReason>>
<<set _pdName to ($companion ? $companion.name : "")>>
<<set _pdHe to ($companion and setup.companionGender($companion) eq "male") ? "he" : "she">>
<<set _pdHim to ($companion and setup.companionGender($companion) eq "male") ? "him" : "her">>
<div class="npc-scene is-comp">
<<if _pdCrew>>
<p class="action-narration is-cold"><<if _pdWhy eq "injury">>You go down somewhere between one room and the next, and the ground comes up faster than you can put a hand out.<<else>>Your legs stop taking instructions. You get maybe two more steps out of them and then you don't.<</if>></p>
<p class="action-narration">You don't remember the walk back. You remember being moved, in the way you remember things through a fever, and a grip under your arms that kept adjusting because you were heavier than <<print _pdHe>> expected.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _pdName>></span><span class="speech">you're heavier than you look, you know that?</span></div>
<p class="action-narration">The hatch seals. The engine note changes. Somewhere in there you stop tracking any of it.</p>
<p class="action-narration is-cold">You come round in your own bunk with the ship already off the rock and the clock a long way past where you left it. Your head is bad and your ribs are worse, but the hold is exactly as full as it was, because <<print _pdName>> carried <<print _pdHim>>self back in with you and dumped <<print _pdHim>> haul on the way past.</p>
<div class="npc-line is-comp"><span class="speaker"><<print _pdName>></span><span class="speech">i'm not doing that twice. eat something.</span></div>
<<else>>
<p class="action-narration is-cold"><<if _pdWhy eq "injury">>You go down and this time nothing stops the ground.<<else>>Your legs stop taking instructions, and there's nobody out here to notice.<</if>></p>
<p class="action-narration">You wake up with grit in your teeth and no idea how long. The suit kept you breathing because that's what the suit is for, and it logged the whole thing, because that's also what the suit is for.</p>
<p class="action-narration is-impact">RECOVERY EVENT LOGGED · ASSET NON-PRODUCTIVE</p>
<p class="action-narration">Whatever you were carrying is out there in the dirt where you dropped it. The company docked you the hours and the ship pulled you off the planet on the automatic, the way it does with anything that stops moving long enough to look like salvage.</p>
<</if>>
<div class="scene-advance"><<link "Sit up">><<set $_collapseReason to null>><<set $_collapseCrewed to null>><<goto "Ship">><</link>></div>
</div>
<<if not $companion>><<goto "Ship">><<else>>
<<set _c to $companion>>
<<run setup.companionEnsure(_c)>>
<<set _tw to $toyWatch>>
<<if not _tw>><<goto "Ship">><<else>>
<<set _male to setup.companionGender(_c) eq "male">>
<<set _heshe to (_male ? "he" : "she")>>
<<set _himher to (_male ? "him" : "her")>>
<<set _name to _c.name>>
<<set _toyName to (setup.getItemDef(_tw.toy) ? setup.getItemDef(_tw.toy).name : "it")>>
<div class="npc-scene is-comp">
<div class="npc-scene-step">
<p class="action-narration">You didn't hear <<= _himher>> come in. <<= _name>> is leaning in the hatchway with arms crossed, watching you work the <<= _toyName.toLowerCase()>> like <<= _heshe>>'s waiting for you to notice.</p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">don't stop on my account</span></div>
<p class="action-narration is-tense"><<= _heshe.toUpperFirst()>> doesn't leave. <<= _heshe.toUpperFirst()>> just stands there and lets it get awkward. Then past awkward, into something neither of you is going to name.</p>
</div>
<div class="scene-advance"><<linkreplace "Keep going and let <<= _himher>> watch">>
<<run setup.hapAt('tease')>>
<div class="npc-scene-step">
<<set _mw to setup.companionSceneMedia(_c, 'show')>>
<<if _mw>><div class="npc-scene-media"><<= setup.mediaTag(_mw)>></div><</if>>
<p class="action-narration">You keep going. <<= _name>> watches the whole thing without saying anything else, and knowing <<= _heshe>>'s there makes it land harder than it had any right to.</p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">*mm* .. yeah, there it is</span></div>
<<run setup.hapFinish('cum')>>
<<run setup.companionBond(1, 'toy_watch')>>
<<run $companion.lust = Math.min(100, ($companion.lust || 0) + 15)>>
</div>
<div class="scene-advance"><<link "Catch your breath">><<run setup.hapOff()>><<set $toyWatch to null>><<goto "Ship">><</link>></div>
<</linkreplace>></div>
<div class="scene-advance"><<linkreplace "Hand it over and let <<= _himher>> do it">>
<<run setup.hapAt('fuck')>>
<div class="npc-scene-step">
<<set _mh to setup.companionSceneMedia(_c, 'oral')>>
<<if _mh>><div class="npc-scene-media"><<= setup.mediaTag(_mh)>></div><</if>>
<p class="action-narration"><<= _name>> takes it off you and does it properly, one hand braced on your hip so you can't squirm away from it, and <<= _heshe>>'s better at this than you are.</p>
<div class="npc-line is-comp"><span class="speaker"><<= _name>></span><span class="speech">you were doing it wrong. hold still</span></div>
<<run setup.hapFinish('cum')>>
<<run setup.companionBond(3, 'toy_watch_join')>>
<<run $player.lust = 0>>
<<run $companion.lust = Math.max(0, ($companion.lust || 0) - 20)>>
<<run setup.fillWornCondom()>>
</div>
<div class="scene-advance"><<link "Lie there a minute">><<run setup.hapOff()>><<set $toyWatch to null>><<goto "Ship">><</link>></div>
<</linkreplace>></div>
<div class="scene-advance"><<link "Tell <<= _himher>> to get out">><<run setup.hapOff()>><<run $companion.lust = Math.min(100, ($companion.lust || 0) + 10)>><<set $toyWatch to null>><<goto "Ship">><</link>></div>
</div>
<</if>>
<</if>>
<div class="ship-header">END OF v0.1</div>
<div class="bc-item-scene">
<div class="bc-item-scene-media"><img src="Images/ui/thumbs_up.jpg" alt="momo signing off"></div>
<div class="bc-item-scene-text">
<p class="action-narration is-cold">Hello. My name is momobackwards, but you can call me momo. This is the first time I've ever made a game.</p>
<p>I hope you enjoyed playing what's here. I know there are some bugs and some logic gaps. I'll try to clean those up before the next version drops.</p>
<p>The reason I didn't push past this is that I kept landing in developer hell. I'd add something new, think it wasn't enough, then add more, then start the whole thing over. There were a lot of iterations before I let it sit as what you're playing now.</p>
<p>I'm not asking for money. I'm doing this as a passion project, I don't need it. The one thing I'd love from you is honest feedback — what worked, what didn't, what made you bounce off, what you wanted more of.</p>
<p class="action-narration is-tense">v0.2 plans on the table: a companion system, more from Mia and Tsu, brand-new characters, ship customizations, and a few more things I'm keeping close until they ship.</p>
<p class="action-narration is-cold">Thanks for sticking around.<br>— momo</p>
</div>
</div>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Back to the game</span><span class="action-hint">Return to where you were</span>'>>
<<if $returnPassage>>
<<goto $returnPassage>>
<<else>>
<<goto "LabrotoriaClubInside">>
<</if>>
<</link>>
</div>
</div><<silent>>
<</silent>>
<div class="ship-header">BACK CORRIDOR</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_office.jpg')>></div>
<p class="action-narration">She's standing by the desk this time in a light blue blouse and a navy office skirt, with the top buttons done up just enough to look like she made an effort. You almost don't recognize her with fabric on.</p>
</div>
<div class="scene-advance"><<linkreplace "Comment on the clothes">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Oh hi. You're finally wearing clothes. What's the occasion?</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Why would there need to be an occasion for me to wear my clothes..</span></div>
<p class="action-narration">She shrugs at you, and then her hand goes to the top button.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Matter of fact, since you're that interested.</span></div>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_tits_pop.jpg')>></div>
<p class="action-narration">She pops the buttons one by one and lets her tits fall out over the top. Smug as anything.</p>
</div>
<div class="scene-advance"><<linkreplace "I guess old habits die hard">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">I guess old habits die hard.</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mhm, anyway, how's it going out there, you still alive I see.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Tell her how it's going">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Yeah. Couple of close calls. Quota's still hard.</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">It's supposed to be hard, you're a low class slave, they don't pay for your therapy. Bring me anything weird from the planets and I'll keep doing what I'm doing for you. Real items I mean, not the junk you sell upstairs.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Noted.</span></div>
<p class="action-narration">She nods, then tilts her head toward the door at the back of the room.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Come back here for a second. I want to show you something.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Follow her">>
<div class="npc-scene-step">
<p class="action-narration">You follow her through the door at the back into a smaller room with a bed shoved against the far wall, and she turns and looks at you with her arms crossed under her tits.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Since you brought me the <<print setup.miaLastGift()>>, I figured I'd treat you with something a pervy dude like you would like.</span></div>
</div>
<div class="scene-advance">
<<link "Step the rest of the way in">>
<<set $mia.officeTalkSeen to true>>
<<goto "MiaRoomFirst">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">HER ROOM</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_naked_sit.jpg')>></div>
<p class="action-narration">By the time you turn around she's already naked, with her blouse on the floor and her skirt thrown over the bed frame. She sits down on the edge of the mattress with her tits resting on her stomach and looks down at you like she's waiting on you to do the next thing.</p>
</div>
<div class="scene-advance"><<linkreplace "Stand there">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Uhh. What do you expect me to do.</span></div>
<p class="action-narration">She stares at you a moment and then her hand comes up to her face in a slow full facepalm.</p>
</div>
<div class="scene-advance"><<linkreplace "Wait for her to say something">>
<div class="npc-scene-step">
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Do I not have enough sex appeal for you to be attracted to me? Whatever. Do whatever you want, as long as it's nothing serious.</span></div>
<p class="action-narration is-cold">She drops her hand and just watches you with her tits out and her legs apart, waiting.</p>
</div>
<div class="scene-advance"><<linkreplace "Get your cock out">>
<div class="npc-scene-step">
<p class="action-narration">You get your suit open and your cock out, and it's already hard because it's been hard since you were standing out in the corridor.</p>
<p class="action-narration">She looks at it, then actually looks at it, then leans forward.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Now that's what I call a good looking dick.</span></div>
<p class="action-narration is-tense">She slides off the bed and onto her knees in front of you.</p>
</div>
<div class="scene-advance"><<linkreplace "Let her help">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_throat.mp4')>></div>
<p class="action-narration">She opens her mouth and you push in halfway down her throat on the first stroke, and she gags once around you and you grab the back of her head and hold her there.</p>
<p class="action-narration">She doesn't fight it. She lets you fuck her throat and she keeps her eyes on you for all of it.</p>
</div>
<div class="scene-advance"><<linkreplace "Pull out and finish on her face">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_facial.mp4')>></div>
<p class="action-narration">You pull out at the last second and strings of it land across her cheek and her nose and her forehead and into her hair. She closes one eye and lets you finish on her face.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mm. I made the right call going naked for this one.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Tuck yourself back in">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_aftermath.jpg')>></div>
<p class="action-narration">By the time you get your suit zipped back up she's already crawled onto the bed and laid her head down with her eyes closed and her face still glazed. She doesn't open them when you walk past.</p>
<p class="action-narration is-cold">Whatever she got out of that, she got it.</p>
</div>
<div class="scene-advance">
<<link "Walk back to the station floor">>
<<set $mia.roomFirstSeen to true>>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">BACK CORRIDOR</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_shower.jpg')>></div>
<p class="action-narration">She's just out of the shower with her hair still wet and water still running off her in places, and she has a towel in one hand that she lets fall the second she sees it's you.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">You back already? Show me what you got.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Show her what you brought">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Picked this up on the last run. Wasn't sure what else to bring.</span></div>
<p class="action-narration">You pull the cucumber out of your bag and she takes it, turns it over in her hand, and runs her thumb the length of it once, slow.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mm, that's a thick one, I've mostly been getting by on my fingers, this'll be a change.</span></div>
<p class="action-narration">She winks at you.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Don't be jealous, I'll let you watch.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Follow her to the bedroom">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_spread.jpg')>></div>
<p class="action-narration">She's on the bed before you finish walking through the door, legs apart, with two fingers from each hand spreading herself open and showing you pink and wet and ready. She holds the cucumber out toward you like she wants you to see exactly how it's going in.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Watch.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Watch">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_cucumber_solo.mp4')>></div>
<p class="action-narration">She slides it in slow and never takes her eyes off your face, and by the time the first third is in her she's leaking down onto the bedsheet and her breath has gone uneven.</p>
<p class="action-narration is-cold">Her face has dropped its smug a notch and she's clearly getting more out of this than she was planning to.</p>
</div>
<div class="scene-advance"><<linkreplace "Keep watching">>
<div class="npc-scene-step">
<p class="action-narration">Her rhythm slows and she tries a few different angles, but none of them get her where she wants to go, and the smug from earlier has dropped off her face into something closer to frustration. She can't quite get there by herself with this thing.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mind giving me a hand here?</span></div>
</div>
<div class="scene-advance"><<linkreplace "Take over">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_cucumber_help.mp4')>></div>
<p class="action-narration">She puts your hand on the cucumber and shows you the rhythm she wants for about three strokes, then her hand falls away and you keep going on your own. She watches you, then she stops watching, then her eyes are somewhere on the ceiling.</p>
</div>
<div class="scene-advance"><<linkreplace "Pick up the pace">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_cucumber_climax.mp4')>></div>
<p class="action-narration">She doesn't squirt and she doesn't have to, because the look on her face when she gets there carries it the rest of the way.</p>
</div>
<div class="scene-advance"><<linkreplace "Catch your breath">>
<div class="npc-scene-step">
<p class="action-narration">She drops back onto the mattress with the cucumber still in her and just lies there with her eyes closed and her chest going up and down hard. She stays exactly where she landed.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Bring me more weird shit from out there, this one's a keeper.</span></div>
<p class="action-narration is-cold">You see her like that on your way out and she still hasn't moved.</p>
</div>
<div class="scene-advance">
<<link "Walk back to the station floor">>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<set $mia.cucumberSceneSeen to true>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">HER ROOM</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<p class="action-narration fi0">You're halfway down the corridor to her room when you hear it through the door.</p>
<p class="action-narration fi1">A wet rhythmic *plap plap plap*, fast, getting faster.</p>
<p class="action-narration fi2">Your stomach drops out of you. The first thing your brain reaches for is the worst version of it, that the company finally clocked her side hustle and decided the punishment was to put her in a back room as a glory hole for whichever of their guys wanted a turn, and you're not thinking anymore by the time your hand hits the door.</p>
</div>
<div class="scene-advance"><<linkreplace "Throw the door open">>
<div class="npc-scene-step">
<<run setup.miaBargeFx()>>
<p class="action-narration is-impact">SLAM.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_dildo_ride.mp4')>></div>
<p class="action-narration">She's on the chair. The dildo, the one you brought her last time, is suctioned to the seat. She's bouncing on it back-to-the-door, her pussy creaming around it on every drop, and the *plap plap plap* you heard from the corridor is just her thighs hitting the chair every time she comes down.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">LET GO OF HER YOU... <span class="whisper">bitches?</span></span></div>
</div>
<div class="scene-advance"><<linkreplace "Process what you actually walked in on">>
<div class="npc-scene-step">
<p class="action-narration">She freezes mid-bounce, half-turns over her shoulder, and squints at you like she can't decide if she's annoyed or laughing.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Woah woah, dude, calm down. What's the yelling for, babe?</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">FUCKING HELL I THOUGHT I LOST YOU TO THE STUPID ASS FUCKING COMPANY. I AM NOT READY TO LOSE YOU.</span></div>
<p class="action-narration">She sits there on the dildo while she takes that in.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">..I didn't think I mattered to you that much, until now.</span></div>
<p class="action-narration is-tense">She lifts off the dildo, gets her mesh suit settled back where it's supposed to sit, and walks over to you with cream from the chair still running down the inside of her thigh. She wipes herself off with two fingers, leans up, and kisses you.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_kiss.mp4')>></div>
</div>
<div class="scene-advance"><<linkreplace "Hold her">>
<div class="npc-scene-step">
<p class="action-narration">She drapes against you while she's kissing you and one of her hands drifts down toward your hip pocket, and you feel the prick a half-second before she does.</p>
<p class="action-narration is-impact">*POKE*</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Ouch.. *licks finger*</span></div>
<p class="action-narration">You pull the syringe out of your pocket. Whatever's inside catches the light when you turn it.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_syringe.png')>></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Shit, sorry. I forgot I still had it on me. Should've put it somewhere safer.</span></div>
<p class="action-narration is-cold">She takes it from you and looks at the label like she already knows what's on it.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Yeah, I know what this one's for. Promise me one thing, don't look at me different after I take it, it hits fast and it knocks you flat for a minute on the way down, so don't freak out.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Wait, why would you even need to...</span></div>
</div>
<div class="scene-advance"><<linkreplace "She doesn't wait for you to finish the question">>
<div class="npc-scene-step">
<p class="action-narration">She's already pushing the plunger.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Oh.. I don't feel so good.</span></div>
<<run setup.miaSlapFx()>>
<p class="action-narration is-impact">HER TITS GO OFF LIKE AIRBAGS.</p>
<p class="action-narration">They double in size in under a second and the front two feet of her body slam into your chest hard enough to knock the wind out of you, and your head meets the floor on the way down, and the room goes dark.</p>
</div>
<div class="scene-advance"><<linkreplace "..come back to">>
<div class="npc-scene-step">
<p class="action-narration bc-blur">You come back to the lights one piece at a time, and there's something warm hitting the back of your throat, and you can't focus on what it is yet.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_lactation.mp4')>></div>
<p class="action-narration">She's sitting on the edge of the bed leaning over you, squeezing her now-massive nipples and aiming them at your mouth. Whatever's coming out of her is hot and thick and tastes like honey and skin underneath the honey, and you swallow because there's nowhere else for it to go.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">There you are, wakey wakey, tits and milky.</span></div>
<p class="action-narration is-cold">You can't tell if you want to laugh at her or open up for another mouthful. Mostly the second one.</p>
</div>
<div class="scene-advance"><<linkreplace "Sit up">>
<div class="npc-scene-step">
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Cleanup on aisle.. my pussy.</span></div>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_doggy_spread.jpeg')>></div>
<p class="action-narration">She's already on the bed in doggy by the time you understand what she said, looking back over her shoulder, holding both her holes open for you with her own hands.</p>
</div>
<div class="scene-advance"><<linkreplace "Lunge for her">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_pretzel.mp4')>></div>
<p class="action-narration">You grab her, drag her around to the edge of the bed, and she ends up on her back with her legs already up in the air for you in a pretzel, holding them spread herself while you push in. She moans the second you bottom out.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Fuck.. yes.. just like that.</span></div>
</div>
<div class="scene-advance"><<linkreplace "She switches positions on you">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_titjob_bounce.mp4')>></div>
<p class="action-narration">She climbs off you and rolls you onto your back instead, then drops down between your legs with the new tits in her hands. They're slick with something she must have oiled them up with while you were out, and she uses her thighs to bounce her whole upper body, sending those huge oily tits down onto your cock with friction you didn't know existed.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mmh.. you like the new ones, baby?</span></div>
</div>
<div class="scene-advance"><<linkreplace "Get to the edge">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_titjob_cum.mp4')>></div>
<p class="action-narration">You finish between her tits without warning. The cum pools on your stomach, threads down between her boobs, runs onto her ribs. You squeeze her tits around your cock and ride it out until your hips stop twitching.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">*mmh* good boy.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Find out you're not done">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_cowgirl.mp4')>></div>
<p class="action-narration">You're still rock hard when she climbs onto you, because whatever she injected is doing things to you too, and she takes you back down into her pussy without breaking eye contact. She works you for a few strokes on her own, then you get your hands on her love handles and you start fucking up into her from the bottom.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Oh my GOD your big balls are slapping my anus so hard.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Make her cum">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_squirt.mp4')>></div>
<p class="action-narration">You go harder and deeper until she gets there, loud and wet all at once.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">I'M CUMMING I'M CUMMING SHIIIT FUCK *MMHHHHH*</span></div>
<p class="action-narration">She squirts down your stomach and across the bed. You don't slow down. She promised you could come inside this time and you intend to.</p>
</div>
<div class="scene-advance"><<linkreplace "Finish in her">>
<div class="npc-scene-step">
<p class="action-narration">You come inside her this time. No pulling out, no apology.</p>
<p class="action-narration">She rides you down on top of you, then slides off and tips forward onto her hands and knees with her ass up. Your cum is already leaking out of her onto the sheet.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_creampie_slap.mp4')>></div>
<<run setup.npcShakeFx()>>
<p class="action-narration is-impact">*SLAP*</p>
<p class="action-narration">You smack her ass on the way past and a small jet of cum particles puffs out of her with the impact, and it splatters across her own thigh.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">..mmmh.. fuck..</span></div>
<p class="action-narration is-cold">She lets out one long low moan and slumps where she is, exhausted, while her tits start coming back down toward something like the size you remember them being. Whatever was in that syringe is wearing off.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">..I put the word in, company's bumping you up to mid-class, means we can do this whenever and they don't come asking. So.. don't get yourself killed out there.</span></div>
</div>
<div class="scene-advance">
<<link "Pull yourself together and head out">>
<<set $mia.syringeSceneSeen to true>>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<run setup.miaPromiseRankUp()>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">HER ROOM</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_sofa.jpeg')>></div>
<p class="action-narration">She's standing in the middle of her bedroom with one hand on the sofa for balance, naked again, head turned to the door so she's already looking at you when you walk in. She doesn't bother straightening up.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">So? What'd you bring me this time?</span></div>
</div>
<div class="scene-advance"><<linkreplace "Hand it over">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/dildo_gift.png')>></div>
<p class="action-narration">You take it out slower than you meant to, and your hand stays on it for a second after she reaches. Not because of the dildo, but because somewhere in the last few visits you started to actually want her to want you specifically, and you can already see the look she gets when something new lands in her hand, and you can already do the math on what you're handing yourself out of with this.</p>
<p class="action-narration is-cold">She doesn't notice any of that. She takes it from you and her face lights up the way you wanted yours to make it light up.</p>
</div>
<div class="scene-advance"><<linkreplace "Try to stay">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">I could stay. Help you figure it out, if you want.</span></div>
<p class="action-narration">She doesn't even look up at you when she answers, she's still turning the dildo over in her hand.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Don't get too comfortable, bud, just because I let you help with the cucumber doesn't mean it's going to be a common occurrence. Out.</span></div>
<p class="action-narration is-cold">She points at the door without looking at you. You step out without arguing because she's right and you know it, and the door clicks shut behind you and the corridor is suddenly very quiet.</p>
</div>
<div class="scene-advance"><<linkreplace "Stand outside the door">>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-impact">THUD.</p>
<p class="action-narration">A soft heavy thump lands on the inside of the door at face height, and you're already at the peephole before you've decided whether you should be.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_dildo_door.mp4')>></div>
<p class="action-narration">She suction-cupped the dildo to the back of her own door at exactly mouth height, and she's on all fours blowing it, lined up so the back of her throat is what's coming through the peephole at you. You start getting your suit open without once looking away.</p>
<p class="action-narration is-cold">*slurrrp* *slurrrrp* *sluuuurp*</p>
</div>
<div class="scene-advance"><<linkreplace "Watch her move">>
<div class="npc-scene-step">
<p class="action-narration">She pulls off the door dildo and gets up and walks across the room, and your whole body locks for an instant because you think she heard you, but she doesn't come to the door. She goes to the bed.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_dildo_bed.mp4')>></div>
<p class="action-narration">She sits down on the edge of the mattress and works the dildo into her pussy hard, no warm-up, like she's been holding off through the entire conversation with you and finally gets to let go. Loud about it.</p>
<p class="action-narration is-tense">She slows for half a second and turns her head toward the door, and she knows you're still out there and she's known the whole time.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">You finally going to come and fuck me, or you just going to keep watching like a peeping tom?</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">I wouldn't pass up fucking you for anything in a million years.</span></div>
<p class="action-narration is-cold">Your hand's already on the door handle.</p>
</div>
<div class="scene-advance"><<linkreplace "Barge in">>
<div class="npc-scene-step">
<<run setup.miaBargeFx()>>
<p class="action-narration is-impact">SLAM.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_anal_steady.mp4')>></div>
<p class="action-narration">She rolls onto her back grinning at you with the dildo still buried in her pussy where she left it. You're not interested in sloppy seconds, so you go for her ass instead.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Mmh.. your dick feels so much better than that cheap piece of plastic, I love it.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Fuck.. your asshole's so tight it's making me act up.</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Pick up the pace, baby, please.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Pick up the pace">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_anal_climax.mp4')>></div>
<p class="action-narration">You go faster and her hand drops down between her legs to work her own clit.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">I'M CUMMING I'M CUMMING I'M CUUUMIIINNGG *mphhhh*</span></div>
<p class="action-narration">She gets there first, around the dildo and your cock at the same time, gripping down on you so hard your rhythm almost breaks.</p>
</div>
<div class="scene-advance"><<linkreplace "Try to follow her">>
<div class="npc-scene-step">
<p class="action-narration">You're a few strokes off your own when her free hand comes up to your hip and stops you cold.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Wait, not in there, please not in there.</span></div>
<p class="action-narration">You open your mouth to ask but she's already moving, sliding off your cock and onto her back on the bed, hands cupping her own tits up toward her face.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">On my face, I'll swallow, I really don't want to clean my anus out tonight, and next time I swear you can come in. Just not this one.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Finish on her">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_facial_anal.mp4')>></div>
<p class="action-narration">You hesitate for half a second because you already came on her face last time and it feels like a pattern, but beggars can't be choosers and your cock isn't going to wait for you to think about it. You finish over her right tit and the cum lands toward her mouth where she wants it, and she takes the rest from there and swallows.</p>
</div>
<div class="scene-advance"><<linkreplace "Get yourself together and head for the door">>
<div class="npc-scene-step">
<p class="action-narration">You zip back up and start toward the door, and you almost get your hand on the knob before she whistles at you, low, the kind of whistle you don't ignore.</p>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_pussy_flaps.jpg')>></div>
<p class="action-narration">She's on her side on the bed with one leg lifted and her fingers holding her pussy lips open, pink and wet, looking right at you like she set up the angle on purpose.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Keep the work up and you might just get a taste of this pussy next time, tiger. Rawrr.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Let that pussy marinate for me till next time.</span></div>
</div>
<div class="scene-advance">
<<link "Walk back to the station floor">>
<<set $mia.dildoSceneSeen to true>>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">HER ROOM</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_waiting.jpeg')>></div>
<p class="action-narration">She's sitting on the edge of the bed when you push the door open, naked already, tits resting on her stomach, eyes locked on the door like she heard your boots in the corridor and didn't bother to do anything with herself in the time it took you to get here.</p>
</div>
<div class="scene-advance"><<linkreplace "Ask why she's been waiting">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">What's got you all giddy at the door like that? Feels like you were waiting for me.</span></div>
<p class="action-narration">She twirls a piece of her hair around one finger and looks up at you from under it.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Well of course I'd be waiting for my partner to come back to me, wink wink.</span></div>
<p class="action-narration">She actually says "wink wink" out loud while winking, twice.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Anyway, since Christmas isn't coming around any time soon, I figured I'd give you something in return.</span></div>
<p class="action-narration">She tilts her chin toward the chair across the room.</p>
</div>
<div class="scene-advance"><<linkreplace "Look at the chair">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/backpack.png')>></div>
<p class="action-narration">There's a backpack on the chair, mint condition leather with clean stitching, easily half again the size of the company-issue bag you came in with. You stare at it before you can speak.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Are you serious? Holy shit. This is the best gift ever. I won't have to keep running back to the ship every other room with this thing.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Try it on">>
<div class="npc-scene-step">
<p class="action-narration">She gets up off the bed and helps you swing the new bag onto your shoulders, fits the straps for you, then steps back to look at you in it. Her tits brush your arm twice during the fitting and you'd swear neither time was an accident.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">So? You like the feel of it? Better feeling than me?</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">It's nice. Not nicer than you, but close.</span></div>
<p class="action-narration">She smiles at that briefly before she covers it back up.</p>
</div>
<div class="scene-advance"><<linkreplace "Wait for her to dismiss you">>
<div class="npc-scene-step">
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Alright, chop chop, I gotta get back to work. We can't let them know we've got anything between us. It's not like they got cameras in my bedroom or anything.</span></div>
<p class="action-narration is-cold">She said it like a joke, but you're pretty sure it isn't one, and that she's been telling you the whole time why she's been getting away with everything she's been getting away with.</p>
</div>
<div class="scene-advance">
<<link "Walk out with the new bag">>
<<set $mia.backpackGiftSeen to true>>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<set _bpBefore to $player.carryLimit or 6>>
<<set $player.carryLimit to Math.min(10, _bpBefore + 2)>>
<<set _bpGain to $player.carryLimit - _bpBefore>>
<<if _bpGain gt 0>>
<<set $useMessage to "Bag's bigger now, cargo capacity +" + _bpGain + " (you've got " + $player.carryLimit + " slots).">>
<<else>>
<<set $useMessage to "She tightens the straps and hands you the new bag. Same number of pockets but it sits cleaner on you.">>
<</if>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">BACK CORRIDOR</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_labcoat.jpg')>></div>
<p class="action-narration">She's already standing when you push the door open, thin lab coat on her properly with sleeves and all, but none of the front buttons are done so the whole front hangs open from her collarbones down with her tits and pussy out and nothing under it, the hem cutting off at her upper thigh. Her glasses are on and her hand's at the frame, pushing them up to get a better look at you.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Can't wait to see what you brought with you this time.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Pull the boombox out">>
<div class="npc-scene-step">
<p class="action-narration">You wrestle the boombox out of your bag and it's heavier than it looks, and the moment she sees what it's her whole face changes and she actually claps once, like a girl on her birthday.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">No way, no way you actually pulled a real boombox off a planet, hand it, hand it.</span></div>
<p class="action-narration">She takes it from you with both hands and turns it over, and the light catches the dust on the speakers.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">How are you even going to play anything on it without any cassettes?</span></div>
</div>
<div class="scene-advance"><<linkreplace "Wait for her answer">>
<div class="npc-scene-step">
<p class="action-narration">She looks up at you and does a slow blink behind the glasses, then leans in and kisses you on the cheek with her tit grazing your arm through the coat.</p>
<p class="action-narration is-tense">A second later her hand's on your chest and she's walking you backwards out the door, and you don't even get to argue with her, the door clicks shut between you before you find your words.</p>
<p class="action-narration is-cold">You hear it click but you don't hear it lock.</p>
</div>
<div class="scene-advance"><<linkreplace "Peek through the peephole">>
<div class="npc-scene-step">
<p class="action-narration">There's a peephole in the door, which you'd already clocked on the way in, and you put your eye to it.</p>
</div>
<div class="scene-advance"><<linkreplace "Look properly">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_searching.mp4')>></div>
<p class="action-narration">She's bent all the way over near a footlocker with her ass pointed at the door and her pussy and asshole both on full display, tits hanging under her, and she's moving things around like she's looking for the cassette, way too slowly to be actually looking for it.</p>
</div>
<div class="scene-advance"><<linkreplace "Press closer to the door">>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-impact">THUD.</p>
<p class="action-narration">Your cock got so hard so fast it hit the door on the way up, loud enough for the whole corridor to hear it, and you freeze.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">(whispered) What is she planning now.</span></div>
<p class="action-narration is-cold">She doesn't react and doesn't look up, just keeps "searching."</p>
</div>
<div class="scene-advance"><<linkreplace "Keep watching">>
<div class="npc-scene-step">
<p class="action-narration">She stands up holding something small and holds it up to the bulb on the ceiling, squints at it, blows the dust off and wipes it on the inside of the lab coat, then pops it into the slot on the side of the boombox and clicks it shut.</p>
<<run setup.startBoomboxSong()>>
<p class="action-narration is-tense">The music starts and she rolls her shoulders and climbs onto the bed.</p>
</div>
<div class="scene-advance"><<linkreplace "Watch her start">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_twerk.mp4')>></div>
<p class="action-narration">She's on her knees on the bed with her ass up and her pussy out, moving to it like she's been waiting to do this since you walked in.</p>
<p class="action-narration is-cold">She doesn't look at the door once, because she doesn't have to.</p>
</div>
<div class="scene-advance"><<linkreplace "Get your cock out">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_jerk.mp4')>></div>
<p class="action-narration">You get your suit open and your cock in your hand by reflex, and you're not quiet about it and you don't try to be.</p>
<p class="action-narration is-cold">She keeps going and the boombox keeps going, and you don't know how long it goes for. Long enough.</p>
</div>
<div class="scene-advance">
<<link "Tuck yourself back in and walk away">>
<<run setup.stopBoomboxSong()>>
<<set $mia.relationship to ($mia.relationship || 0) + 1>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<silent>>
<</silent>>
<div class="ship-header">SOMETHING IN THE CORRIDOR</div>
<div class="npc-scene is-mia">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_idle.jpg')>></div>
<p class="action-narration">You follow the silhouette into a side corridor where the lights are dimmer, and up close she resolves into a real woman, dark caramel skin in stockings and nothing else on her. She turns when she hears your boots.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Oh.. I wasn't expecting to see someone here so soon.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Ask why she's naked">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">First of all, why are you naked? Aren't you going to cover up?</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Why would I? Judging by that reaction you must be new around here.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Press the question">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">You guessed that right. But still, can you explain why?</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">The reason I didn't bother covering up is because you're probably a low class slave from the looks of it. It's already illegal for you to even look in my direction, so take that as you want.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Push back">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">If that's the case why are you teasing me then? Aren't station workers not supposed to engage with low class slaves?</span></div>
<p class="action-narration is-tense fi0">She closes the distance.</p>
<p class="action-narration is-tense fi1">Two slow steps.</p>
<p class="action-narration is-tense fi2">You step back and hit the wall behind you. She keeps coming until her tits are almost touching you.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">I guess you don't really want to feel the touch of a real woman.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Grab them">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_grope.mp4')>></div>
<p class="action-narration">Your hands move before your head catches up, and you grab, and they're heavier in your palms than you thought they would be.</p>
<p class="action-narration is-cold">She goes very still.</p>
</div>
<div class="scene-advance"><<linkreplace "Realize what you just did">>
<div class="npc-scene-step shake-once">
<<run setup.miaSlapFx()>>
<p class="action-narration is-impact">SHE SLAPS YOU. HARD.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">DID YOU KNOW WHAT YOU JUST DID, YOU FUCKING MORON?</span></div>
</div>
<div class="scene-advance"><<linkreplace "Try to play it off">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Chill, it wasn't that big of a deal. If you weren't flaunting them at me I wouldn't have grabbed those puppies in the first place.</span></div>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Oh that's it. You've done it now. I'm reporting you to the company and getting your ass arrested and killed.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Plead. Hard.">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/player_crying.mp4')>></div>
<p class="action-narration">Your knees hit the floor on you and the crying starts about a second behind it, and you don't have any kind of plan in your head, you just have noise coming out of you.</p>
<p class="action-narration is-cold">She watches you a moment and you can hear her thinking through it.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Alright, new deal. You bring me things from the planets you work, salvage and items and anything I can't get on the station. Do that and I keep my mouth shut, we never had this conversation.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Try to threaten her back">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Why would I do that for you when I can just rat you out to the company first?</span></div>
<p class="action-narration">She doesn't say anything for a while, and her mouth pulls up at one corner.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">What do you think happened to the guy before you that tried that.</span></div>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/skeleton_fall.mp4')>></div>
<p class="action-narration is-cold">You go cold all the way through.</p>
</div>
<div class="scene-advance"><<linkreplace "Take the deal">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/mia/mia_mesh.jpg')>></div>
<p class="action-narration">She pulls a mesh suit on over the stockings while she's talking, covering nothing.</p>
<div class="npc-line is-mia"><span class="speaker">Mia</span><span class="speech">Now get out of here, and next time I see you I want scrap in your hand. I'll know if you come back empty.</span></div>
<p class="action-narration is-cold">She turns away and the conversation is over.</p>
</div>
<div class="scene-advance">
<<link "Walk back to the station floor">>
<<set $mia.metFirst to true>>
<<set $mia.lastSeenDay to $time.day>>
<<goto "Station">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><<run setup.stopBoomboxSong()>>
<<run setup.clearLocationAmbient()>>
<<run setup.setAmbient('music', 'Sounds/music/station_clarinet.mp3', { volume: 0.20, fadeInMs: 1800, fadeOutMs: 1400 })>>
<div class="ship-header"><<print $ship.stationName.toUpperCase()>> REFUELING STATION</div>
<<roomImage "station_interior">>
Fluorescent lights overhead, metal floors under your boots, and the air down here smells like recycled sweat and engine coolant in equal parts. The dock's been left to run itself for a long time, and the only sound off the deck is the hum of vents pulling air through the hall.
<<set _rw to setup.recruitWaitingHere()>>
<<if _rw>>
<<set _rwName to _rw.rec.name>>
<<set _rwSig to _rwName.charAt(0)>>
<<set _rwSkin to "peek-hint " + ((_rw.rec.gender eq "female") ? "is-comp-f" : "is-comp-m")>>
<div @class="_rwSkin"><span class="ph-cap"></span><span class="ph-sigil"><<print _rwSig>></span><span class="ph-scan"></span><span class="ph-who"><<print _rwName>></span><span class="ph-tag">Contact</span>
<<link "By the fuel pumps with a duffel at their feet and the hood still up.">>
<<goto "RecruitPickup">>
<</link>>
</div>
<</if>>
<<if $ship.stationName eq "Cumdump-9">>
<<if not $mia.metFirst>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "Something catches your eye in the corner. A silhouette down a side corridor. Tits out, you would swear.">>
<<goto "MiaIntro">>
<</link>>
</div>
<<elseif $mia.relationship gte 1 and not $mia.officeTalkSeen>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's in the back. She's wearing actual clothes for once.">>
<<goto "MiaOfficeTalk">>
<</link>>
</div>
<<elseif $mia.cucumberSceneSeen and not $mia.backpackGiftSeen>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's in the back and the door's been left open for you.">>
<<goto "MiaBackpack">>
<</link>>
</div>
<<else>>
<<set _hasCucumber to false>>
<<set _hasBoombox to false>>
<<set _hasDildo to false>>
<<set _hasSyringe to false>>
<<for _i to 0; _i lt $ship.cargo.length; _i++>>
<<if $ship.cargo[_i].id eq "cucumber">><<set _hasCucumber to true>><</if>>
<<if $ship.cargo[_i].id eq "boombox">><<set _hasBoombox to true>><</if>>
<<if $ship.cargo[_i].id eq "dildo">><<set _hasDildo to true>><</if>>
<<if $ship.cargo[_i].id eq "unlabeled_syringe">><<set _hasSyringe to true>><</if>>
<</for>>
<<if $ship.storage>>
<<for _j to 0; _j lt $ship.storage.length; _j++>>
<<if $ship.storage[_j].id eq "unlabeled_syringe">><<set _hasSyringe to true>><</if>>
<<if $ship.storage[_j].id eq "dildo">><<set _hasDildo to true>><</if>>
<<if $ship.storage[_j].id eq "cucumber">><<set _hasCucumber to true>><</if>>
<<if $ship.storage[_j].id eq "boombox">><<set _hasBoombox to true>><</if>>
<</for>>
<</if>>
<<set _gaveBoombox to ($mia.giftHistory and $mia.giftHistory.indexOf("boombox") gte 0)>>
<<set _gaveCucumber to ($mia.giftHistory and $mia.giftHistory.indexOf("cucumber") gte 0)>>
<<set _gaveDildo to ($mia.giftHistory and $mia.giftHistory.indexOf("dildo") gte 0)>>
<<if _hasSyringe and $mia.dildoSceneSeen and not $mia.syringeSceneSeen and setup.progressExpMaxed()>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's in the back. The needle in your pocket is the last thing she asked for.">>
<<run setup.miaGiveSyringe()>>
<<goto "MiaSyringe">>
<</link>>
</div>
<<elseif _hasSyringe and $mia.dildoSceneSeen and not $mia.syringeSceneSeen>>
<div class="peek-hint is-gated is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<span class="peek-gated-line">She's in the back, but she won't take the needle yet. Your production record isn't full, so she can't argue a rank case for numbers you don't have. Keep selling.</span>
</div>
<<elseif _hasDildo and $mia.backpackGiftSeen and not _gaveDildo and setup.miaStepReady('dildo')>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's in the back. You've got something heavier than usual in your bag and she's going to ask about it.">>
<<run setup.miaGiveDildo()>>
<<goto "MiaDildo">>
<</link>>
</div>
<<elseif _hasDildo and $mia.backpackGiftSeen and not _gaveDildo>>
<<set _mdP to setup.miaStepPct('dildo')>>
<div class="peek-hint is-gated is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<span class="peek-gated-line">She's in the back, but she's not in the mood to be bought yet. Your record is at <<print _mdP.have>>% and she wants <<print _mdP.need>>% before she takes anything else off you.</span>
</div>
<<elseif _hasCucumber and $mia.roomFirstSeen and not _gaveCucumber and setup.miaStepReady('cucumber')>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's in the back. She'll want to know what you brought.">>
<<run setup.miaGiveCucumber()>>
<<goto "MiaCucumber">>
<</link>>
</div>
<<elseif _hasCucumber and $mia.roomFirstSeen and not _gaveCucumber>>
<<set _mcP to setup.miaStepPct('cucumber')>>
<div class="peek-hint is-gated is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<span class="peek-gated-line">She's in the back. She clocks the bag and waves you off. Your record is at <<print _mcP.have>>% and she wants <<print _mcP.need>>% before she starts taking favours.</span>
</div>
<<elseif _hasBoombox and not _gaveBoombox>>
<div class="peek-hint is-mia"><span class="ph-cap"></span><span class="ph-sigil">M</span><span class="ph-scan"></span><span class="ph-tag">Story</span>
<<link "She's waiting in the back. You can feel the boombox in your bag like she can smell it.">>
<<run setup.miaGiveBoombox()>>
<<goto "MiaBoombox">>
<</link>>
</div>
<</if>>
<</if>>
<<else>>
You step off into the dock and it's a fuel line, a vending wall, and the hum of the vents. No side trades down here, no faces, nobody running a back corridor. Whoever owns this station has never once set foot on it.
<</if>>
<div class="ship-desc">
Fuel: <<print $ship.fuel>>% | Wallet: <<creditChip $player.credits>> | Fuel cost: <<creditChip setup.getFuelCost()>> per 10%
</div>
<<if $ship.fuel lt $ship.maxFuel>>
<div class="ship-actions">
<<if $player.credits gte setup.getFuelCost()>>
<div class="ship-action row-link">
<<link `'<span class="action-icon-svg">' + setup.ICONS.fuelPump + '</span><span class="action-label">Buy fuel (+10%)</span><span class="action-hint"><span class="credits-chip"><img src="Images/ui/credits.png" alt="cr">' + setup.getFuelCost() + '</span></span>'`>>
<<run setup.BUY_FUEL_PER_10()>>
<<goto "Station">>
<</link>>
</div>
<<else>>
<div class="ship-action disabled">
<span class="action-icon-svg"><<print setup.ICONS.fuelPump>></span><span class="action-label">Buy fuel (+10%)</span><span class="action-hint"><span class="credits-chip"><img src="Images/ui/credits.png" alt="cr"><<print setup.getFuelCost()>></span> -- not enough credits</span>
</div>
<</if>>
</div>
<</if>>
<<run setup.ensureProgress()>>
<<if $ship.cargo.length gt 0 or $ship.storage.length gt 0>>
<div class="sidebar-divider"></div>
<<set _sellableCount to 0>>
<<set _sellableValue to 0>>
<<for _saI to 0; _saI lt $ship.cargo.length; _saI++>>
<<if not $ship.cargo[_saI].locked>><<set _sellableCount += 1>><<set _sellableValue += setup.saleValueOf($ship.cargo[_saI])>><</if>>
<</for>>
<<for _saJ to 0; _saJ lt $ship.storage.length; _saJ++>>
<<if not $ship.storage[_saJ].locked>><<set _sellableCount += 1>><<set _sellableValue += setup.saleValueOf($ship.storage[_saJ])>><</if>>
<</for>>
<div class="panel-title"><span>SELL ITEMS</span>
<<if _sellableCount gt 0>>
<<link `'<span class="sell-all-btn" title="Sell all ' + _sellableCount + ' unlocked items"><span class="sa-label">SELL ALL</span><span class="credits-chip"><img src="Images/ui/credits.png" alt="cr"><span class="sa-amt">+' + _sellableValue + '</span></span></span>'`>>
<<set _saResult to setup.sellAllEverything()>>
<<set _saToast to '<strong>SOLD ' + _saResult.soldCount + ' ITEMS</strong><br>+' + _saResult.net + ' credits'>>
<<if _saResult.cut gt 0>>
<<set _saToast += '<br><span class="dim">' + $companion.name + '\'s cut: ' + _saResult.cut + 'cr (' + $companion.cutPercent + '% of ' + _saResult.gross + ')</span>'>>
<</if>>
<<if _saResult.lockedCount gt 0>>
<<set _saToast += '<br><span class="dim">(' + _saResult.lockedCount + ' locked items skipped)</span>'>>
<</if>>
<<run setup.showUseToast(_saToast, { variant: 'hint', dwell: 3600 })>>
<<goto "Station">>
<</link>>
<<else>>
<span class="sell-all-btn is-disabled" title="Everything is locked">SELL ALL</span>
<</if>>
</div>
<<if $ship.cargo.length gt 0>>
<<set _cargoIdx to []>>
<<for _i to 0; _i lt $ship.cargo.length; _i++>>
<<run _cargoIdx.push(_i)>>
<</for>>
<<run _cargoIdx.sort(function(a,b){var la=$ship.cargo[a].locked?1:0;var lb=$ship.cargo[b].locked?1:0;return la-lb;})>>
<div class="storage-grid">
<<for _j, _i range _cargoIdx>>
<<capture _i>>
<<set _ci to $ship.cargo[_i]>>
<<set _rowCls to _ci.locked ? 'storage-row is-locked' : 'storage-row'>>
<div @class="_rowCls">
<div class="storage-img"><img @src="'Images/items/' + _ci.id + '.png'" @alt="_ci.name"></div>
<div class="storage-info">
<div class="storage-name"><<print _ci.name>></div>
<div class="storage-val"><<creditChip setup.saleValueOf(_ci)>> <span class="storage-loc">(backpack)</span><<if _ci.cursed>> <span class="storage-loc" title="The company docks cursed goods to half. It doesn't say why.">cursed -50%</span><</if>></div>
</div>
<div class="storage-actions">
<<link `'<span class="sell-lock-btn' + (_ci.locked ? ' is-locked' : '') + '" title="' + (_ci.locked ? 'Locked: not for sale. Click to unlock.' : 'Click to lock: SELL ALL and Sell skip it.') + '">' + (_ci.locked ? setup.ICONS.locked : setup.ICONS.unlocked) + '</span>'`>>
<<run setup.toggleCargoLock(_i)>>
<<goto "Station">>
<</link>>
<<if not _ci.locked>>
<<link "Sell">>
<<set _sr to setup.sellFromCargo(_i)>>
<<if _sr.cut gt 0>><<run setup.showUseToast('+' + _sr.net + 'cr · ' + $companion.name + ' took ' + _sr.cut + 'cr', { variant: 'hint', dwell: 2400 })>><</if>>
<<goto "Station">>
<</link>>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<<if $ship.storage.length gt 0>>
<<set _stoIdx to []>>
<<for _i to 0; _i lt $ship.storage.length; _i++>>
<<run _stoIdx.push(_i)>>
<</for>>
<<run _stoIdx.sort(function(a,b){var la=$ship.storage[a].locked?1:0;var lb=$ship.storage[b].locked?1:0;return la-lb;})>>
<div class="storage-grid">
<<for _j, _i range _stoIdx>>
<<capture _i>>
<<set _si to $ship.storage[_i]>>
<<set _rowCls to _si.locked ? 'storage-row is-locked' : 'storage-row'>>
<div @class="_rowCls">
<div class="storage-img"><img @src="'Images/items/' + _si.id + '.png'" @alt="_si.name"></div>
<div class="storage-info">
<div class="storage-name"><<print _si.name>></div>
<div class="storage-val"><<creditChip setup.saleValueOf(_si)>> <span class="storage-loc">(storage)</span><<if _si.cursed>> <span class="storage-loc" title="The company docks cursed goods to half. It doesn't say why.">cursed -50%</span><</if>></div>
</div>
<div class="storage-actions">
<<link `'<span class="sell-lock-btn' + (_si.locked ? ' is-locked' : '') + '" title="' + (_si.locked ? 'Locked: not for sale. Click to unlock.' : 'Click to lock: SELL ALL and Sell skip it.') + '">' + (_si.locked ? setup.ICONS.locked : setup.ICONS.unlocked) + '</span>'`>>
<<run setup.toggleStorageLock(_i)>>
<<goto "Station">>
<</link>>
<<if not _si.locked>>
<<link "Sell">>
<<set _sr to setup.sellFromStorage(_i)>>
<<if _sr.cut gt 0>><<run setup.showUseToast('+' + _sr.net + 'cr · ' + $companion.name + ' took ' + _sr.cut + 'cr', { variant: 'hint', dwell: 2400 })>><</if>>
<<goto "Station">>
<</link>>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<<else>>
Nothing to sell. Nobody's around to care either way.
<</if>>
<div class="sidebar-divider"></div>
<<set _shSid to setup.currentStationId()>>
<div class="panel-title">COMPANY STORE<<if _shSid>><span class="panel-count" title="Whatever the other crews stripped off the shelf comes back on the next run">RESUPPLY <<print setup.shopRestockLabel()>></span><</if>></div>
<div class="storage-grid">
<<for _shI, _shId range setup.SHOP_IDS>>
<<capture _shI, _shId>>
<<set _shDef to setup.ITEMS[_shId]>>
<<set _shStock to _shSid ? setup.stationStock(_shSid, _shId) : 0>>
<<set _shCap to setup.shopCapOf(_shId)>>
<<set _shElse to _shStock lte 0 ? setup.shopElsewhere(_shId, _shSid) : []>>
<<set _shRowCls to _shStock lte 0 ? 'storage-row is-empty' : 'storage-row'>>
<<set _shStockCls to 'shop-stock'>>
<<if _shStock lte 0>><<set _shStockCls to 'shop-stock out'>>
<<elseif _shStock lte 1>><<set _shStockCls to 'shop-stock low'>><</if>>
<div @class="_shRowCls">
<div class="storage-img"><img @src="'Images/items/' + _shId + '.png'" @alt="_shDef.name"></div>
<div class="storage-info">
<<set _shBlk to (setup.isRecruitFile(_shId) ? setup.recruitBlockReason() : null)>>
<<set _shRec to (_shSid ? setup.shelfRecruit(_shSid, _shId) : null)>>
<<set _shPrice to (_shSid ? setup.shopPriceOf(_shSid, _shId) : _shDef.shopPrice)>>
<<set _shName to _shDef.name>>
<<if _shRec>><<set _shName to _shDef.name + ': ' + (_shRec.gender eq 'female' ? 'Female' : 'Male')>><</if>>
<div class="storage-name"><<print _shName>> <span @class="_shStockCls"><<print _shStock>>/<<print _shCap>></span></div>
<<if _shStock lte 0>>
<div class="storage-val">Cleared out.<<if _shElse.length>> Still on the shelf at <<print _shElse.join(', ')>>.<</if>></div>
<<elseif _shBlk>>
<div class="storage-val"><<print _shBlk>></div>
<<else>>
<div class="storage-val"><<print _shPrice>> credits</div>
<</if>>
</div>
<div class="storage-actions">
<<if _shStock lte 0>>
<span class="action-disabled" title="Another crew got here first">Out</span>
<<elseif _shBlk>>
<span class="disabled-action" @title="_shBlk">—</span>
<<elseif $player.credits gte _shPrice>>
<<link "Buy">>
<<set _br to setup.buyShopItem(_shId)>>
<<set $useMessage to _br.msg>>
<<goto "Station">>
<</link>>
<<else>>
<span class="disabled-action">—</span>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
<br>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Return to ship</span><span class="action-hint">Ship stays docked</span>'>><<goto "Ship">><</link>>
</div>
</div>
<<set _idx to $cargoIndex>>
<<if _idx lt 0 or _idx gte $ship.cargo.length>>
<<goto "Ship">>
<<else>>
<<set _item to $ship.cargo[_idx]>>
<<set _def to setup.getItemDef(_item.id)>>
<<set _name to _item.name>>
<<set _cat to (_def ? _def.category : 'scrap')>>
<<set _catUp to _cat.toUpperCase()>>
<<set _iconSrc to _def ? ('Images/items/' + _item.id + '.png') : 'Images/items/empty_slot.png'>>
<<set _desc to (_def and _def.desc) ? _def.desc : 'Salvage from the surface. Might fetch credits at the station.'>>
<<set _val to _item.value>>
<div class="ship-header">_name</div>
<div class="cargo-item-panel">
<div class="cargo-item-img">
<img @src="_iconSrc" @alt="_name">
</div>
<div class="cargo-item-info">
<div class="cargo-item-cat"><<print _catUp>> -- value: <<print _val>> scrap<<if typeof _item.charges is 'number'>> · charges: <<print _item.charges>> / <<print (_item.maxCharges || _item.charges)>><</if>></div>
<div class="cargo-item-desc"><<print _desc>></div>
</div>
</div>
<div class="ship-actions">
<<if _def and _def.equippable and _def.category eq 'gear'>>
<<set _slotName to setup.gearSlotLabel(_def.slot)>>
<<set _gearGate to setup.canEquipGear(_item.id)>>
<<if _gearGate.ok>>
<div class="ship-action">
<<link `'<span class="action-label">Wear</span><span class="action-hint">Put on ' + _slotName + ' slot</span>'`>>
<<set _wr to setup.equipGearFromCargo($cargoIndex)>>
<<if not _wr.ok and _wr.reason>>
<<set $useMessage to _wr.reason>>
<<goto "CargoItem">>
<<else>>
<<goto `previous()`>>
<</if>>
<</link>>
</div>
<<else>>
<div class="ship-action disabled" title="`_gearGate.reason`">
<span class="action-label">Wear</span><span class="action-hint"><<print _gearGate.reason>></span>
</div>
<</if>>
<<elseif _def and _def.equippable>>
<div class="ship-action">
<<link '<span class="action-label">Equip</span><span class="action-hint">Hold in hand</span>'>>
<<run setup.equipFromCargo($cargoIndex)>>
<<goto `previous()`>>
<</link>>
</div>
<</if>>
<<if _def and _def.usable>>
<<capture _item>>
<<set _useVerb to _def.useLabel or 'Use'>>
<<set _useLabel to _useVerb>>
<<if typeof _item.charges is 'number'>>
<<set _useLabel to _useVerb + ' (\u00d7' + _item.charges + ')'>>
<</if>>
<<if setup.canUseItem(_item.id, _item)>>
<div class="ship-action">
<<link `'<span class="action-label">' + _useLabel + '</span><span class="action-hint">' + (_def.useLabel ? '' : 'Activate item') + '</span>'`>>
<<run setup.playItemSound(_item.id)>>
<<set _msg to setup.useItem(_item.id, $cargoIndex)>>
<<set $cargoIndex to -1>>
<<if $_useRedirect>><<set _rd to $_useRedirect>><<set $_useRedirect to null>><<goto _rd>>
<<else>><<set $useMessage to (typeof _msg is 'string' ? _msg : 'Nothing happens.')>><<goto `previous()`>><</if>>
<</link>>
</div>
<<else>>
<div class="disabled-action" title="Not usable right now"><span class="action-label"><<print _useLabel>></span><span class="action-hint"><<if typeof _item.charges is 'number' and _item.charges lte 0>>empty<<elseif _item.id eq "medkit">>HP already full<<elseif _item.id eq "pulse_scanner">>nothing to scan from in here<<elseif _item.id eq "hormone_blocker">>already active<<elseif _item.id eq "stress_ball">>lust already drained<<elseif _item.id eq "fleshlight" and $body.gender eq "female">>nothing to feed through<<elseif _item.id eq "fleshlight" and $player.gear and $player.gear.chastity>>caged, can't get hard<<else>>not usable right now<</if>></span></div>
<</if>>
<</capture>>
<</if>>
<<set _moveCtx to setup.cargoMoveContext()>>
<<if _moveCtx eq 'ground'>>
<div class="ship-action">
<<link '<span class="action-label">Drop here</span><span class="action-hint">Dump on the ground</span>'>>
<<run setup.dropCargoToRoom($cargoIndex)>>
<<goto `previous()`>>
<</link>>
</div>
<<elseif _moveCtx eq 'ship'>>
<div class="ship-action">
<<link '<span class="action-label">Stash in ship</span><span class="action-hint">Move to ship storage</span>'>>
<<run setup.storeItemFromCargo($cargoIndex)>>
<<goto `previous()`>>
<</link>>
</div>
<</if>>
<<if $companion and $companion.aboard and _moveCtx eq 'ship'>>
<<set _gift to setup.companionGiftable($companion, _item.id)>>
<<if _gift.ok>>
<div class="ship-action">
<<link `'<span class="action-label">Give it to ' + $companion.name + '</span><span class="action-hint">' + (_gift.kind eq 'wear' ? 'She puts it on' : (_gift.kind eq 'arm' ? 'She takes it up' : 'Goes in their kit')) + '</span>'`>>
<<set _gr to setup.companionGiveItem($companion, $cargoIndex)>>
<<set $giftScene to (_gr.ok ? setup.companionGiftScene($companion, _item.id, _gr.kind) : null)>>
<<set $giftReturn to previous()>>
<<if $giftScene>><<goto "CompanionGift">><<else>><<run setup.showUseToast(_gr.line, { variant: 'hint', dwell: 4200 })>><<goto `previous()`>><</if>>
<</link>>
</div>
<<elseif setup.COMPANION_GEAR_SLOTS[_item.id] or setup.COMPANION_TOY_IDS.indexOf(_item.id) gte 0 or (setup.getItemDef(_item.id) and (setup.getItemDef(_item.id).category eq 'weapon' or setup.getItemDef(_item.id).equippable))>>
<div class="ship-action bazaar-soon">
<span class="action-label">Give it to <<print $companion.name>></span><span class="action-hint"><<print _gift.why>></span>
</div>
<</if>>
<</if>>
<<if previous() eq 'AltarShrine' and not _item.cursed>>
<<if ($planet and $planet.altarOffering ? $planet.altarOffering.length : 0) lt 3>>
<div class="ship-action">
<<link '<img class="action-icon" src="Images/ui/minimap/prayer.png" alt=""><span class="action-label">Lay on the altar</span><span class="action-hint">Offer it to the mother</span>'>>
<<run setup.altarPlaceFromCargo($cargoIndex)>>
<<goto "AltarShrine">>
<</link>>
</div>
<<else>>
<div class="ship-action is-spent"><span class="action-label">Lay on the altar</span><span class="action-hint">the stone's full</span></div>
<</if>>
<</if>>
<div class="ship-action">
<<set _lockLabel to _item.locked ? 'Unlock' : 'Lock'>>
<<set _lockHint to _item.locked ? 'Unlock, stashes on auto-dump' : 'Lock, keep in backpack when boarding'>>
<<link `'<span class="action-label">' + _lockLabel + '</span><span class="action-hint">' + _lockHint + '</span>'`>>
<<run setup.toggleCargoLock($cargoIndex)>>
<<goto "CargoItem">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back</span>'>><<goto `previous()`>><</link>>
</div>
</div>
<</if>><div class="ship-header">SHIP STORAGE</div>
<<if $ship.upgraded>>
<<roomImage "ship_storage_new">>
<</if>>
<div class="ship-desc">
<<if $ship.storage.length eq 0>>
<<if $ship.upgraded>>The storage bay's empty. Yellow-and-black hazard floor, racks running floor-to-ceiling, a conveyor track laid in along the right wall, and a workstation chair tucked in by the door. Same capacity as before, but you don't have to dig through anything anymore.
<<else>>The storage hold is empty. Metal shelves, scuffed dividers, straps dangling.<</if>>
<<else>>
<<set _total to 0>>
<<for _sI, _sItem range $ship.storage>>
<<set _total += _sItem.value>>
<</for>>
Shelves full of junk. <<print $ship.storage.length>> items stashed. Total value: <<print _total>> scrap.
<</if>>
</div>
<<if $ship.storage.length gt 0>>
<div class="storage-grid">
<<for _i, _sItem range $ship.storage>>
<<capture _i, _sItem>>
<<set _def to setup.getItemDef(_sItem.id)>>
<<set _sIcon to 'Images/items/' + _sItem.id + '.png'>>
<<set _sRowCls to _sItem.locked ? 'storage-row is-locked' : 'storage-row'>>
<div @class="_sRowCls">
<div class="storage-img"><img @src="_sIcon" @alt="_sItem.name"></div>
<div class="storage-info">
<div class="storage-name"><<print _sItem.name>></div>
<div class="storage-val"><<print _sItem.value>> scrap</div>
</div>
<div class="storage-actions">
<<link `'<span class="sell-lock-btn' + (_sItem.locked ? ' is-locked' : '') + '" title="' + (_sItem.locked ? 'Locked: not for sale. Click to unlock.' : 'Click to lock: SELL ALL and Sell skip it.') + '">' + (_sItem.locked ? setup.ICONS.locked : setup.ICONS.unlocked) + '</span>'`>>
<<run setup.toggleStorageLock(_i)>>
<<goto "ShipStorage">>
<</link>>
<<if not setup.cargoFull()>>
<<link "Take">>
<<run setup.takeFromStorage(_i)>>
<<goto "ShipStorage">>
<</link>>
<<else>>
<span class="disabled-action">Backpack full</span>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<br>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Back to ship</span>'>><<goto "Ship">><</link>>
</div>
</div><<run setup.stopAmbient('base')>>
<<run setup.stopAmbient('encounter')>>
<<run setup.ensureBoomboxSong("Sounds/music/labrotoria_club_muffled.mp3")>>
<div class="ship-header">LABROTORIA-69 — CIVILIAN DOCK</div>
Your ramp drops onto stained concrete and the night air hits you, ship coolant on the bottom and something sweeter on top of it like spilled liquor sitting in the heat. Six other ships sit parked in a rough crescent around you, all sleeker than yours, and most of them have their hulls cleaned up enough that the paint still reads. Nobody's near them and nobody's standing out here at all.
At the back of the lot a low wide building squats three stories tall with pink neon hosed up the corners and black glass for walls, and a sign over the door spelling LABROTORIA in letters that flicker on one side. Two bouncers stand under the awning and neither of them looks your way when your hatch seals behind you.
You're a long way from your usual contract.
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Head to the club</span><span class="action-hint">Cross the lot</span>'>><<goto "LabrotoriaClubExterior">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to ship</span><span class="action-hint">Climb the ramp</span>'>><<goto "Ship">><</link>>
</div>
</div><<run setup.stopAmbient('base')>>
<<run setup.ensureBoomboxSong("Sounds/music/labrotoria_club_muffled.mp3")>>
<div class="ship-header">LABROTORIA-69 — OUTSIDE THE CLUB</div>
<div class="npc-scene-media"><<print setup.mediaTag("Images/media/labrotoria/club_queue.mp4")>></div>
The music hits you halfway across the lot. The high end's gone, eaten by the walls, leaving just the kick and a long muffled smear underneath. Bass on your boots, the rest of the song trailing behind.
<em>That's loud as hell from out here. Whatever's pumping through their floor has to be shaking glasses off the bar.</em>
The queue at the door isn't moving. You walk straight up to it like you've been through twice already, eyes on the awning. The bouncer at the front doesn't look up from his cuffs as you pass. Nobody in the line says a word.
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Go inside</span><span class="action-hint">Push through the door</span>'>><<goto "LabrotoriaClubInside">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to the lot</span><span class="action-hint">Turn away from the door</span>'>><<goto "Labrotoria">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to ship</span><span class="action-hint">Walk all the way back</span>'>><<goto "Ship">><</link>>
</div>
</div><<run setup.stopAmbient('base')>>
<<run setup.stopAmbient('music', 600)>>
<<run setup.stopAmbient('shower', 600)>>
<<run setup.ensureBoomboxSong("Sounds/music/labrotoria_club.mp3")>>
<div class="ship-header">LABROTORIA-69 — INSIDE</div>
<<if not $tsu.introSeen>>
<div class="npc-scene-media"><<print setup.mediaTag("Images/media/labrotoria/club_inside_intro.mp4")>></div>
The door swings shut behind you and the bass moves out of your boots and into your sternum. Packed floor, hot lights, somebody pushing past with a tray of drinks held high overhead, the place loud enough to taste.
Then your bladder reminds you what you actually came in here for. You'd been putting it off out in the lot, the music and the lights covering for it, but the alcohol on the air doesn't help and you're walking funny by your second step in.
<em>Find the restroom before this becomes a uniform problem.</em>
You scan the back wall. Bar on the right, stage straight ahead, a dark hallway tucked behind a half-velvet curtain on the far left with a sign you can't read from here. That'll be it.
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Push toward the back hall</span><span class="action-hint">Avoid eye contact</span>'>>
<<set $tsu.introSeen to true>>
<<goto "LabrotoriaClubBathroomDoor">>
<</link>>
</div>
</div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("labrotoria_inside"))>></div>
The bass picks up where it left off in your sternum. Same mess on the floor, same crowd at the bar. The place hasn't changed since the last time you stepped out.
<div class="ship-actions">
<<if $tsu.metFirst>>
<div class="ship-action">
<<link '<span class="action-label">Head downstairs to find Tsu</span><span class="action-hint">Past the stairwell behind the bar</span>'>>
<<goto "TsuLobby">>
<</link>>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Back to the back hall</span><span class="action-hint">Restrooms</span>'>><<goto "LabrotoriaClubBathroomDoor">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back outside</span><span class="action-hint">Push through the door</span>'>><<goto "LabrotoriaClubExterior">><</link>>
</div>
</div>
<</if>><<run setup.stopAmbient('base')>>
<<run setup.ensureBoomboxSong("Sounds/music/labrotoria_club_muffled.mp3")>>
<div class="ship-header">LABROTORIA-69 — BACK HALLWAY</div>
<div class="npc-scene-media"><<print setup.mediaTag("Images/media/labrotoria/bathroom_door.mp4")>></div>
The back hall swallows the music a few decibels at a time the further you walk into it. By the end the bass is sitting behind the wall like somebody knocking from the next room over. Two doors at the dead-end, no labels, no figures. Whoever runs this place wasn't going to make it easy on a first-timer.
<em>Right or left, coin flip, you're losing the war either way so just pick one.</em>
<<if not $tsu.metFirst>>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Push a door, go with your gut</span><span class="action-hint">Stall in sight, finish the job</span>'>><<goto "TsuIntro">><</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to the floor</span><span class="action-hint">Hold it a little longer</span>'>><<goto "LabrotoriaClubInside">><</link>>
</div>
</div>
<<else>>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Use the restroom</span><span class="action-hint">Work in progress</span>'>>
<<set $returnPassage to "LabrotoriaClubBathroomDoor">>
<<goto "DevNote">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to the floor</span><span class="action-hint">Find the stairs</span>'>><<goto "LabrotoriaClubInside">><</link>>
</div>
</div>
<</if>><<run setup.stopAmbient('base')>>
<<run setup.ensureBoomboxSong("Sounds/music/labrotoria_club_muffled.mp3")>>
<div class="ship-header">LABROTORIA-69 — RESTROOM</div>
<div class="npc-scene is-thug">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/tsu/grope_intro.mp4')>></div>
<p class="action-narration">You're three steps in and half-unzipped when you look up.</p>
<p class="action-narration is-tense">She's on the tile by the far stall, wrists cuffed up behind her head, a red ball gag wedged between her teeth, and two guys are crouched over her taking their time. The bigger one's behind her working the bra strap with both hands while the other one's up in her face with one hand under her bra.</p>
</div>
<div class="scene-advance"><<linkreplace "Don't breathe">>
<div class="npc-scene-step">
<p class="action-narration">Her head snaps your way and the wet noise she makes around the gag is supposed to be a word.</p>
<div class="npc-line is-unknown"><span class="speaker">???</span><span class="speech"><span class="whisper">hlp m...</span></span></div>
<p class="action-narration">You hear her loud and clear, but your body's stuck a full step behind your brain, and neither of the two guys has so much as looked up.</p>
</div>
<div class="scene-advance"><<linkreplace "Force yourself to think">>
<div class="npc-scene-step">
<p class="action-narration">She tries again louder, jerks her shoulders, kicks one heel against the tile hard enough that the sound bangs off the stalls, and the bigger one snorts a laugh while the other one catches your reflection in the mirror above the sink and looks up.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Hey. Hey! Get off her.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Wait for the answer">>
<div class="npc-scene-step">
<div class="npc-line is-thug"><span class="speaker">Bigger one</span><span class="speech">What is your problem douche bag? We're trying to discipline this bitch. She sold us faulty equipment last time and our ship almost broke in half from the pressure of space. She had it coming, small fry.</span></div>
<div class="npc-line is-thug"><span class="speaker">Other one</span><span class="speech">Yeah what he said.</span></div>
<p class="action-narration is-cold">Your hands stay at your sides while somewhere inside your head you remember you came in here to piss.</p>
</div>
<div class="scene-advance"><<linkreplace "Stand there. Don't move.">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/tsu/grope_giveup.mp4')>></div>
<p class="action-narration is-cold">Her eyes drop and whatever she was holding onto when you walked in goes with them, and the bigger one's on his knees behind her with both hands working the clasp of her bra and his back wide open to you the whole time, while the other one's up in her face with both hands on her chest.</p>
</div>
<div class="scene-advance"><<linkreplace "Make the moment count">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/labrotoria/punch.mp4')>></div>
<p class="action-narration is-impact">CROSS THE TILE.</p>
<p class="action-narration">Your feet are moving by the time your head catches up, right hand already wound back as you cross the second step, the fist cracking flush into the bigger one's jaw on the way down and his whole body folding sideways with his head bouncing off the floor.</p>
<<run setup.miaBargeFx()>>
</div>
<div class="scene-advance"><<linkreplace "Take the other one">>
<div class="npc-scene-step">
<div class="npc-line is-thug"><span class="speaker">Other one</span><span class="speech">YOU SON OF A BITCH YOU HAVE DONE IT.</span></div>
<p class="action-narration">He yanks his hands off her chest and tries to scramble back, but he's still on his knees in front of her and slow on the lift, and she gets there before you do, swinging her whole upper body so her forehead cracks square into the bridge of his nose.</p>
<p class="action-narration is-impact">DOWN.</p>
<<run setup.miaSlapFx()>>
</div>
<div class="scene-advance"><<linkreplace "Get her out of the cuffs">>
<div class="npc-scene-step">
<p class="action-narration">You step over the other one and crouch behind her. The cuffs are cheap plastic, one snip from anything serious, but you don't have anything serious, so you work the locking notch with your thumb until they click loose. Her wrists come down in front of her, raw at the bone where the plastic bit in.</p>
<p class="action-narration">You undo the gag and she breathes out long through her teeth, works her jaw once before she can talk.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">You okay?</span></div>
<div class="npc-line is-unknown"><span class="speaker">???</span><span class="speech">Y-yeah... yeah, I think so. Thank you.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">What's your name?</span></div>
<div class="npc-line is-unknown"><span class="speaker">???</span><span class="speech">Tsu. I'm Tsu. I run the workshop down in the basement.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Give her a second">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/tsu/dress_up.mp4')>></div>
<p class="action-narration">She stands holding her bra in one hand, looks around for her dress, finds it kicked under one of the stall doors, gets it back over her head with her back half-turned to you and slips her arms through. Then she bends to grab her purse off the floor by the sink and the dress rides up the back of her thighs, and she lets it ride a long second longer than she needs to.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Thanks again. Come find me when you're done in here, the workshop's the door at the back of the basement, you can't miss it. I owe you a real one.</span></div>
<p class="action-narration">She slips past you toward the door, brushes your arm on the way, and doesn't look at you when she does it.</p>
</div>
<div class="scene-advance">
<<link "Finish what you came for">>
<<set $tsu.metFirst to true>>
<<set $tsu.introSeen to true>>
<<set $tsu.relationship to 1>>
<<set $tsu.lastSeenDay to $time.day>>
<<run setup.advanceMinutes(15)>>
<<goto "LabrotoriaClubInside">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<<set _gU to $tsu.giftPick ? setup.upgradeById($tsu.giftPick) : null>>
<<if $tsu.giftPick>><<run setup.upgGrantFree($tsu.giftPick)>><</if>>
<<roomImage "tsu_workshop">>
<div class="npc-scene is-tsu"><div class="npc-scene-step">
<<switch $tsu.giftPick>>
<<case "engine">>
<p class="action-narration">She is under the nose of the ship before you have finished saying it, and she comes back out wiping her hands on her thigh.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">injectors were company spec, which means somebody got paid to make them worse. they're not any more.</span></div>
<<case "scanner">>
<p class="action-narration">She digs a flat grey unit out of a crate that has not been opened in a while and bolts it under the nose in about four minutes.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">it'll sniff the ground before you're off the ramp. won't tell you what's out there. just where.</span></div>
<<case "bathroom">>
<p class="action-narration">She waves at two of her people and they start pulling panels off the aft section before you have agreed to anything.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">hot water and a door that shuts. you'll understand why that matters about a week from now.</span></div>
<<case "coolant">>
<p class="action-narration">She has your suit off you and up on the bench, and she threads line through the weave with a patience she has not shown you once all night.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">the desert rocks kill more of you lot than anything with teeth. this'll keep the water in you.</span></div>
<<case "exo">>
<p class="action-narration">The servos go in at the knees and the elbows and the small of your back, and when you stand up the suit stands up slightly before you do.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">it walks, you steer. takes some getting used to. try not to run into anything for the first day.</span></div>
<</switch>>
<p class="action-narration is-cold">She goes back to her chair and picks the iron up again, and that is the end of it as far as she is concerned.</p>
<div class="scene-advance">
<<link "Head back out">>
<<set $tsu.upgradeDone to true>>
<<set $tsu.workshopHeard to true>>
<<set $tsu.relationship to $tsu.relationship + 1>>
<<set $tsu.lastSeenDay to $time.day>>
<<set $ship.upgraded to true>>
<<run setup.advanceMinutes(45)>>
<<run setup.showUseToast("<strong>SHIP UPGRADED</strong><br>Fuel cost -20%, recharge -15%, new interior unlocked." + (_gU ? "<br><b>" + _gU.name + "</b> fitted free." : ""), { variant: 'hint', dwell: 5200 })>>
<<goto "TsuLobby">>
<</link>>
</div>
</div></div><<run setup.stopBoomboxSong()>>
<<run setup.stopAmbient('shower', 600)>>
<<run setup.setAmbient('music', 'Sounds/music/labrotoria_club_muffled.mp3', { volume: 0.20, fadeInMs: 1400, fadeOutMs: 800 })>>
<div class="ship-header">LIZZIE'S</div>
<<roomImage "tsu_lobby">>
The stairs spit you out into a low corridor washed in neon. The bass from upstairs is sitting through the ceiling now, dulled down to body-only pressure rather than music. A wide desk takes up most of the back wall under a pink sign that reads LIZZIE'S, two monitors stacked across it and a third tilted off to one side, the smell of solder and instant noodles hanging close to the floor.
You can see the top of someone's head behind the monitors. Black hair with pink streaked through it, one earbud in.
<<if not $tsu.lobbyMet>>
<div class="npc-scene is-lizzie">
<div class="npc-scene-step">
<p class="action-narration">You walk up to the desk before you can think of a better way to announce yourself, and lean your hands on the edge.</p>
</div>
<div class="scene-advance"><<linkreplace "Clear your throat">>
<div class="npc-scene-step">
<<run setup.npcShakeFx()>>
<p class="action-narration is-impact">SHE NEARLY COMES OUT OF THE CHAIR.</p>
<div class="npc-line is-lizzie"><span class="speaker">Lizzie</span><span class="speech">HOLY SHIT YOU FUCKING SCARED ME.</span></div>
<p class="action-narration">She yanks one earbud out, shoves a monitor sideways with the back of her hand, and you get your first proper look at her. Pink streaks, dark eyeliner, a cropped hoodie over a black tube top, a chain on her belt loop running into her pocket.</p>
</div>
<div class="scene-advance"><<linkreplace "Apologize">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Sorry sorry, my bad, I didn't mean to come down on you like that. My name's...</span></div>
<div class="npc-line is-lizzie"><span class="speaker">Lizzie</span><span class="speech">Oh. Oh, it's YOU.</span></div>
<p class="action-narration">She squints, leans forward in her chair until her elbows are on the desk, and the whole posture changes.</p>
</div>
<div class="scene-advance"><<linkreplace "Hold still">>
<div class="npc-scene-step">
<div class="npc-line is-lizzie"><span class="speaker">Lizzie</span><span class="speech">Tsu told me about you. You're the one who pulled her out of the bathroom from <span class="gang-rust">Rusty's Boys</span>. Honestly, friend of my friend is my friend, that's how it works around here. You don't gotta explain yourself.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">She's expecting me, then?</span></div>
<div class="npc-line is-lizzie"><span class="speaker">Lizzie</span><span class="speech">Back door's open, she said leave it open for you. Go on in. And if you came down here looking for trouble I'm telling you now I keep a baton under this desk and I'm faster than I look.</span></div>
<p class="action-narration is-cold">She gives you exactly half a smile, slides the monitor back into place, and the earbud goes back in. You're already dismissed.</p>
</div>
<div class="scene-advance">
<<link "Head through the back door">>
<<set $tsu.lobbyMet to true>>
<<set $tsu.lastSeenDay to $time.day>>
<<run setup.advanceMinutes(3)>>
<<goto "TsuShower">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<<else>>
<p>Lizzie glances up from her monitors, lifts her chin in a tired nod, and goes back to whatever she was doing. The back door's open the way she said it'd be.</p>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Head through the back door</span><span class="action-hint">Tsu\'s room</span>'>>
<<set $tsu.lastSeenDay to $time.day>>
<<goto "TsuShower">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back upstairs</span><span class="action-hint">Climb back to the floor</span>'>>
<<goto "LabrotoriaClubInside">>
<</link>>
</div>
</div>
<</if>>
<<if not $tsu.showerSceneSeen>>
<<run setup.setAmbient('music', 'Sounds/music/labrotoria_club_muffled.mp3', { volume: 0.10, fadeInMs: 1000 })>>
<<run setup.setAmbient('shower', 'Sounds/shower_muffled.mp3', { volume: 0.42, fadeInMs: 1200 })>>
<<else>>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop_muffled.mp3', { volume: 0.32, fadeInMs: 1200, fadeOutMs: 800 })>>
<<run setup.stopAmbient('shower', 600)>>
<</if>>
<div class="ship-header">TSU'S ROOM</div>
<<roomImage "tsu_room">>
<<if not $tsu.showerSceneSeen>>
<div class="npc-scene is-tsu">
<div class="npc-scene-step">
<p class="action-narration">The door's already cracked when you reach it. Pink overhead, no music in the room itself, just the city blinking through the holographic window and a frosted-glass partition off to the right with water running soft behind it. More pulse than spray, like it's been on low for a while.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech"><span class="whisper">(under your breath)</span> I feel like I'm having déjà vu...</span></div>
<p class="action-narration is-cold">Last time you saw this woman she was getting half-undressed by people who shouldn't have been touching her. Different door, same view.</p>
</div>
<div class="scene-advance"><<linkreplace "Step toward the partition">>
<<run setup.setAmbient('shower', 'Sounds/shower_running.mp3', { volume: 0.36, fadeInMs: 700, fadeOutMs: 500 })>>
<<run setup.setAmbient('music', 'Sounds/music/labrotoria_club_muffled.mp3', { volume: 0.07, fadeInMs: 600 })>>
<<run setTimeout(function(){ var el = document.getElementById('tsu-shower-exit'); if (el) el.remove(); }, 50)>>
<div class="npc-scene-step">
<div class="npc-scene-media"><img src="Images/media/tsu/tsu_nude_still.jpg" alt="Tsu"></div>
<p class="action-narration">You pull the partition open and she's already there. Naked, dry hair tied up, one hip cocked against the tile, the spray pattering down beside her instead of on her. She wasn't IN the shower. She was waiting in it.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Took your time. Don't just stand there. Come in and close the door, you're letting the steam out.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Pull the door shut behind you">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("tsu_shower_intro"))>></div>
<p class="action-narration">She steps backwards into the spray without looking, one hand up to pull the tie out of her hair and the other already cupping a tit as the water hits her shoulders. Her ass moves slow on the way down. She knows you're watching, and she's not in a hurry about any of it.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Stop staring. Strip. You smell like bar floor and the longer you stand there the longer that's going to be true.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Get the suit off">>
<div class="npc-scene-step">
<p class="action-narration">You strip out of the suit the way you usually do at the end of a shift, fast and unceremonious, dropping it where you stand instead of folding it. She watches the whole time without saying anything, both hands working soap across her chest and down her stomach while the light catches her thighs through the steam.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">You're not gonna make this awkward, are you?</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">I planned it. It's not awkward when I planned it. Get in.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Step into the spray">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("tsu_shower_wash"))>></div>
<p class="action-narration">The water's hotter than you expected. She steps around behind you the second you're in and presses her chest against your shoulder blades, and then she's working soap into your back with her tits as much as her hands. Her nipples drag across the small of your back. She keeps going lower with each pass, the soap sliding everywhere her tits go, until her face is pressed against the curve of your shoulder and her hand is wrapped loose around your hip.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Hold still. You're worse than I thought.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Turn into her">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("tsu_shower_anal_rub"))>></div>
<p class="action-narration">She steps back from you and takes hold of your wrist to pull you toward the back wall. Her free hand grabs the ledge along the lower tile and she steps one foot up on it, hips angled, water sliding down the back of her thighs to where her ass meets the tile, the whole position lined up so the head of your cock has nowhere to land but right there.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Rub it on me. Not in. Just on.</span></div>
<p class="action-narration is-tense">You step up behind her and she pushes back into you, the head of your cock sliding wet between her cheeks. Soap and water make the drag effortless. She holds the ledge with both hands and rocks back into you, breathing hard, and every time your tip drags over her anus her whole back curls and the noise she makes catches in the back of her throat.</p>
</div>
<div class="scene-advance"><<linkreplace "Hold off before you lose it">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("tsu_shower_frottage"))>></div>
<p class="action-narration">She pulls off you before you can finish like that, turns, hooks her hand behind your neck, and walks you backwards two steps until your shoulders hit the tile and your legs fold under you. You go down to the floor and the water's pooling around the drain by the time she's straddling you with her chest crushed against yours.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Don't put it in. Just feel it.</span></div>
<p class="action-narration">She grinds her thighs along the length of your cock with the soap the only thing between her skin and yours, slow at first, then faster when she finds the rhythm. The soap turns everything between her legs into a slick mess that drags around your cock without letting it inside her. Her tits crush flat against your chest with every push and you can feel her heartbeat off her ribs.</p>
</div>
<div class="scene-advance"><<linkreplace "Tell her you're close">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Tsu. I'm close. Where do you want it.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">On my face. Let me see you finish.</span></div>
<p class="action-narration">She pulls off you and slides down to her knees right there on the tile, turns her face up under the spray, mouth open, eyes on yours, and you grab yourself in one hand and step in toward her.</p>
</div>
<div class="scene-advance"><<linkreplace "Finish on her">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia("tsu_shower_facial"))>></div>
<p class="action-narration is-impact">YOU DON'T LAST.</p>
<p class="action-narration">The first rope lands across her cheekbone and the next two come right after it, mouth and then chin, the last one spilling down the side of her neck, and she takes all of it without flinching with her eyes never once leaving yours. The water hits her face after and washes some of it down but not all of it, and she licks what's at the corner of her mouth without looking away.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">There. That's better.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Try to say something">>
<div class="npc-scene-step">
<p class="action-narration is-cold">She gets up and kisses you once at the corner of your mouth, then reaches up to shut the water off. The drip from the spout is the loudest thing in the room.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Get dressed. Come back tomorrow if you can spare it. There's a job I want to talk to you about.</span></div>
<p class="action-narration">She doesn't wait for an answer. She pulls a towel off the rack and wraps it around herself on the way out of the partition, leaving you with the smell of soap and water and her on your skin.</p>
</div>
<div class="scene-advance">
<<link "Get dressed and head back out">>
<<set $tsu.showerSceneSeen to true>>
<<set $tsu.relationship to $tsu.relationship + 1>>
<<set $tsu.lastSeenDay to $time.day>>
<<run setup.advanceMinutes(35)>>
<<run setup.stopAmbient('shower', 800)>>
<<goto "TsuLobby">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<div class="ship-actions" id="tsu-shower-exit">
<div class="ship-action">
<<link '<span class="action-label">Back to the lobby</span><span class="action-hint">Past Lizzie, leave her to it</span>'>>
<<run setup.stopAmbient('shower', 600)>>
<<goto "TsuLobby">>
<</link>>
</div>
</div>
<<else>>
The shower partition's dry, the bed's made, and the towel rack's bare. The door on the far wall, the one you didn't notice last time, is open a crack and you can hear music through it. Not the club. Something slower. Synthy, almost lazy, with a beat that sits low in the chest.
<<if not $tsu.upgradeDone>>
<em>She said come back when you could. You're back.</em>
<<else>>
<em>You've been through that door before. She's still in there. Probably always in there.</em>
<</if>>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Head into the workshop</span><span class="action-hint">Through the door on the far wall</span>'>>
<<run setup.stopAmbient('shower', 400)>>
<<run setup.tsuGiftRoll()>>
<<goto "TsuWorkshop">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back to the lobby</span><span class="action-hint">Past Lizzie</span>'>>
<<run setup.stopAmbient('shower', 400)>>
<<goto "TsuLobby">>
<</link>>
</div>
</div>
<</if>>
<<if not $tsu.upgradeDone>>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop.mp3', { volume: 0.45, fadeInMs: 800, fadeOutMs: 600 })>>
<<else>>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop.mp3', { volume: 0.45, fadeInMs: 800 })>>
<</if>>
<div class="ship-header">TSU'S WORKSHOP</div>
<<roomImage "tsu_workshop">>
<<if not $tsu.upgradeDone>>
<div class="npc-scene is-tsu">
<div class="npc-scene-step">
<p class="action-narration">You step through the door at the back of her room and the music gets louder fast. Monitors stacked three-high along the back wall and the air thick with solder and bad coffee.</p>
<div class="scene-advance"><<linkreplace "Look for her">>
<div class="npc-scene-step">
<p class="action-narration">Tsu is behind the desk in the same white slingshot strap she lounges in down here, cutting across her chest and slung between her thighs. She glances up with something that almost gets to being a smile, then goes back to the circuit board in front of her, tapping a rhythm against the desk in time with the music.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Sit down or stand, your call. I'm finishing a board.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">I'll stand.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Suit yourself. Don't say I didn't offer.</span></div>
<div class="scene-advance"><<linkreplace "Watch her work">>
<div class="npc-scene-step">
<p class="action-narration">She's quick with her hands and she knows you're watching and isn't putting on a show about it. You came down here for a reason and now that you're here you can feel it sitting in the back of your throat.</p>
<div class="scene-advance"><<linkreplace "Ask her about Rusty's Boys">>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop.mp3', { volume: 0.04, fadeMs: 600 })>>
<<run setup.npcShakeFx()>>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Hey. Tsu. <span class="gang-rust">Rusty's Boys</span>. Who are they?</span></div>
<p class="action-narration is-tense">She doesn't answer right away. Her hand goes still on the board. Then she sets the soldering iron down in its cradle and reaches over without looking to twist a knob on the mixer.</p>
<p class="action-narration is-cold">The music drops out of the room like somebody pulled a plug.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">You sure you want to know?</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Yeah.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Wait">>
<div class="npc-scene-step">
<div class="npc-scene-media"><img src="Images/media/tsu/tsu_slingshot.jpg" alt="Tsu"></div>
<p class="action-narration">She rolls the chair around to face you, slow, in no hurry. The slingshot does what slingshots do, and she watches your eyes for the half-second it takes them to drag down and back up. The smile that was on her face when you walked in is still there, a little bigger now, like she enjoyed catching you.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Sit. I told you to sit. This is going to take a minute.</span></div>
<p class="action-narration">You sit on the edge of the work bench. She kicks an empty crate toward you with one bare foot so you can put yours up. The whole room is dim and quiet now, just the hum of the monitors and the faint hiss of the soldering iron cooling down in its cradle.</p>
</div>
<div class="scene-advance"><<linkreplace "Let her start">>
<div class="npc-scene-step">
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Long time ago, a hundred years and change, there were two slaves working high-class for the company. Different bracket than you. They got assigned executive details. Ran their own contracts. Had immunity for basically anything inside the rules. Their names were Rusty and Camila. He was the strategist. She was the one who knew how to put a crew together.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">They started recruiting. Slaves like you. Low-class, bottom of the bracket, written off the second you stop being profitable. Rusty and Camila lifted them out, gave them a real crew, gave them weapons, taught them how to live past their first assignment.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Executives didn't like that.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Wait, you're—">>
<<run setup.miaSlapFx()>>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Wait. Aren't YOU also working for the—</span></div>
<p class="action-narration is-impact">DON'T.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Don't interrupt me. I'm not one of those storytellers who has to repeat themselves because some kid couldn't shut his mouth for three minutes.</span></div>
<p class="action-narration is-tense">She holds your eye a second longer than comfortable. You shut your mouth.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">And to answer the question you were about to ask. I work WITH the company. Not FOR. There's a difference, and you're going to want to learn it, because the rest of this only makes sense if you know which side of that line I sit on.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Apologize. Let her continue.">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Sorry. Go on.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">So. Rusty and Camila built up a crew. The company has rules about that. Recruiting outside the executive channels destabilizes the bracket system. The executives are paranoid about anything that looks like it could grow. So they moved on them.</span></div>
<p class="action-narration">She pulls something up on one of the monitors over her shoulder with a tap. The screen wakes up, then the image loads, and you wish she hadn't shown you.</p>
</div>
<div class="scene-advance"><<linkreplace "Look">>
<div class="npc-scene-step">
<div class="npc-scene-media"><img src="Images/media/tsu/executives.jpg" alt="Executives"></div>
<p class="action-narration is-cold">Two shapes. You think they're people, the way they're standing, but the longer you look the less sure you get. Too tall. Wrong proportions in the shoulder. Eyes that catch the light in a way eyes shouldn't, glowing dim like coals through fog.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">The executives aren't like us. They've been running this company for longer than the company has had a name. They don't age the way we age. They don't lose interest until the lesson is taught.</span></div>
<p class="action-narration is-cold">You keep looking. Your head does the thing it does when you're looking at something your brain wants to file away as not-real so it doesn't have to deal with it.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Look as long as you need to. You should be afraid of them. That's the appropriate response.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Force yourself to look away">>
<div class="npc-scene-step">
<div class="npc-scene-media"><img src="Images/media/tsu/fleet_battle.jpg" alt="Fleet"></div>
<p class="action-narration">She taps the monitor again and the executives are replaced with a wide formation of ships against the dust of a nebula, lasers cutting across the dark in straight lines, hulls breaking apart in slow motion.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">The Ten Days War. Company sent a full fleet after Rusty and Camila's crew. Cornered them in a debris field on the back side of a dead system. Took ten days to wipe them out. They lost some ships too. Not many. Enough that the company doesn't talk about the loss, but you can see the dent in the next quarter's logistics if you know where to look.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Every member of the crew died. Every single one. Rusty and Camila got out in the first hour. They knew how the executives operate. They knew the second the fleet showed up that the crew was already a memorial. They ran while the others bought them the seconds.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Sit with that">>
<div class="npc-scene-step">
<p class="action-narration is-cold">Tsu watches you while you look at the picture. Lets it sit. Then she leans forward in her chair until her elbows are on her knees, the slingshot pulling tight enough across her chest that you can hear the fabric strain.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">That crew. The ones who got vaporized in the debris field over ten days. Every single one of them was a slave who got recruited up out of the bracket. Just like you. Lifted out of the dirt, given a future, given a uniform that wasn't a company brand.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">You're sitting on that crate because they died first. That's the math. That's the whole math.</span></div>
<p class="action-narration is-cold">You don't say anything. You can hear the monitor humming. Your hands aren't quite still on your knees.</p>
</div>
<div class="scene-advance"><<linkreplace "Ask what happened to Rusty and Camila">>
<div class="npc-scene-step">
<div class="npc-scene-media"><img src="Images/media/tsu/rusty_hideout.jpg" alt="Hideout station"></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Ran. Hid. Found a decommissioned company hauling station way out in nowhere. One of those places an accountant abandons in an economy pivot and nobody thinks about again. They cleaned it out, sealed the airlocks, killed the transponder, and just lived there.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">A hundred years. The company still doesn't know where they are. Nobody knows where they are.</span></div>
<p class="action-narration">She lets that sit too. Then a small smile.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Except me.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Ask about the Boys">>
<div class="npc-scene-step">
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">During the war, while everybody was paying attention to the debris field, they cracked a company breeding facility on the way to their hideout. Took an incubator. Whole unit, fully self-contained. The company didn't notice the inventory short for ten years.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Camila's eggs. Rusty's sperm. The incubator does the rest. Print a body, grow it to working age, off it goes. They've been at it for the full hundred years.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">The crew you've been calling <span class="gang-rust">Rusty's Boys</span> are all their kids. Same parents. Different print runs. Brood, not gang. They've been gestating an army the long way around.</span></div>
</div>
<div class="scene-advance"><<linkreplace "And three days ago?">>
<div class="npc-scene-step">
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Three days ago Rusty came down here. Personally. First time in twenty years he's set foot off that station. Asked me to retrofit his whole fleet for an offensive run on company territory.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">I said no. He didn't take the no well. Made some noises about how the company can be reminded where I sleep if I don't play along. Real classy negotiation.</span></div>
<p class="action-narration">She smiles, slow, and it's all mouth.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">So I took the contract. Worked on his command ship for three days straight. Charged him market rate. Then I sabotaged every system in the engine block on the way out the door. Two of his Boys came down here the next day to discipline me about it.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Thought I'd put them down. Apparently those fuckers are harder to kill than I gave them credit for. They had the balls to come at me head-on. Which is where YOU walked in.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">So it worked out for me either way.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Then why not just join them">>
<div class="npc-scene-step">
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Then why didn't you just join them? Bring down the company. End the executives. Done.</span></div>
<p class="action-narration">She laughs. It's a single short laugh, more surprised than anything, and then she's shaking her head.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Look around you.</span></div>
<p class="action-narration">She gestures. The whole room. The monitors, the workbench, the soldering iron, the rolling chair, the slingshot strap cutting across her ribs. Past the room, the workshop, the basement, the club, the lot, the planet.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">I have a whole planet. I own the basement, the club above us, the lot the ships dock in, the workshop, the inventory. I am basically lawless on this rock, but I am lawful WITHIN it. Nobody touches me. Nobody touches anyone I don't want touched. That's the deal I have with the company. I keep the slave traffic in this dock paying its bills, the executives leave me alone.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">If Rusty wins his war, the company falls. If the company falls, the bracket system collapses with it. The whole structure that keeps my deal standing comes down. I lose every cent of the empire I've spent fifty years building. So no, I don't join the revolution. The revolution would burn down the house I'm sitting in.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Plus, dying for a cause is somebody else's job. I'm built for sitting in this chair with a wrench. That's the part of me I want to keep alive.</span></div>
<p class="action-narration">She smiles at you with her eyes mostly. The kind of smile you give to somebody you're not lying to.</p>
</div>
<div class="scene-advance"><<linkreplace "Take all of that in">>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop.mp3', { volume: 0.45, fadeMs: 1100 })>>
<div class="npc-scene-step">
<p class="action-narration">She stands up. The chair rolls back a foot on its own. She reaches over and twists the knob on the mixer back the way it was, and the music comes up underneath her again, slow, the bass settling back into the floor.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Debt's paid, by the way. The bathroom thing. We're square.</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">You didn't owe me anything for that.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">I owe everybody for everything. That's how I stay alive. Come on. Let me show you what I made you.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Follow her through the bay door">>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop_muffled.mp3', { volume: 0.22, fadeInMs: 700, fadeOutMs: 500 })>>
<div class="npc-scene-step">
<<roomImage "ship_engineering">>
<p class="action-narration">She leads you out a side door, down a corridor you didn't know existed, and through a wide bulkhead into a hangar bay you definitely didn't know existed. The ceiling goes up three stories. The whole space smells like coolant and ozone and something hot. The music from her office sits behind you, muffled by the corridor, just bass and a long smear of synth.</p>
<p class="action-narration">In the middle of the bay, on its landing legs, is a ship, and it takes you a second to work out that it isn't yours. This one sits longer and lower and there isn't a scorch mark anywhere on it. A hologram of the same ship turns slow on a pedestal beside it, half-transparent, lines tracing through it as it goes. Schematics scroll down a screen off to the side.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Your old hauler is at the scrapyard. They're stripping it for the parts I couldn't reuse. This one's yours.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Step up the ramp">>
<div class="npc-scene-step">
<<roomImage "ship_cockpit">>
<p class="action-narration">She walks you up the ramp and through the hatch and you're in the cockpit before you've registered the layout. Two seats. Viewports running the whole curve of the front. Holo-displays in clean blue across the panels. The chair under your hand isn't beat to hell.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Twin terminals. Software's rewritten from the ground up. I'm not going to walk you through it now, that's a conversation for another day. You'll figure out the difference fast.</span></div>
<p class="action-narration">You run a hand over the console. It feels expensive. It feels like a ship that someone thought about.</p>
</div>
<div class="scene-advance"><<linkreplace "Look around the rest">>
<div class="npc-scene-step">
<<roomImage "ship_bedroom">>
<p class="action-narration">She points down a short corridor to the next compartment. A wide bed sits against the back wall under a viewport that looks straight out into space. Sheets pulled but not military-folded. A low couch off to one side. A coffee table with a panel embedded in the top. A bookshelf with actual books on it.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Room for someone next to you in there. If that ever becomes relevant.</span></div>
<p class="action-narration">She lets the line sit. Watches your face for a second to see how it lands, and the small smile pulls up again at one corner of her mouth like she's enjoying herself.</p>
</div>
<div class="scene-advance"><<linkreplace "Last room">>
<div class="npc-scene-step">
<<roomImage "ship_storage_new">>
<p class="action-narration">A wide storage bay sits behind the bedroom. Racks running floor to ceiling along one wall, hazard-striped flooring, a conveyor track laid in along the middle. It's bigger than the cabinet you used to call storage, but the rack capacity hasn't changed.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Same cargo space as before. You don't get more room. You get a ship that doesn't waste 20% of its fuel running tired engines, and a recharge cycle that costs 15% less because the wiring isn't held together with electrical tape and prayer.</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Try not to total it. I won't build you another one.</span></div>
</div>
<div class="scene-advance"><<linkreplace "Try to thank her">>
<<run setup.setAmbient('music', 'Sounds/music/tsu_workshop.mp3', { volume: 0.45, fadeInMs: 1400, fadeOutMs: 800 })>>
<div class="npc-scene-step">
<<roomImage "tsu_workshop">>
<p class="action-narration">She walks you back through the corridor, back through the bay, back into the workshop. The music climbs as you cross the threshold, the bass rising under her like she never lowered it. By the time you're standing in front of her desk again it's at full volume, settling into the floor.</p>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">Tsu, look. Thank you. Seriously. I don't know how to—</span></div>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Don't. I didn't do it for you specifically. I did it because the debt was open and I don't like open debts. Don't make it weird.</span></div>
<p class="action-narration">She drops back into her chair, kicks it once to spin a half-rotation, lands facing her workbench. Picks the soldering iron back up. Doesn't look at you when she keeps talking.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Maybe I'll cash in a favor of my own one day. Don't worry about it now. Get out of my workshop, I've got other shit to do.</span></div>
</div>
<<set _tgOffer to setup.tsuGiftRoll()>>
<<if _tgOffer.length gt 0>>
<p class="action-narration">You are most of the way to the door when she says it without turning round.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">one more thing. hull's bare. pick something off the board and I'll bolt it on before you go, on the house. don't make a thing of it.</span></div>
<<for _tgi, _tgId range _tgOffer>>
<<capture _tgId>>
<<set _tgU to setup.upgradeById(_tgId)>>
<div class="scene-advance is-tsu-gift">
<<link `'<span class="action-label">' + _tgU.name + '</span><span class="action-hint">' + _tgU.effect + '</span>'`>>
<<set $tsu.giftPick to _tgId>>
<<goto "TsuWorkshopGift">>
<</link>>
</div>
<</capture>>
<</for>>
<<else>>
<div class="scene-advance">
<<link "Head back out">>
<<set $tsu.giftPick to null>>
<<goto "TsuWorkshopGift">>
<</link>>
</div>
<</if>>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div><</linkreplace>></div>
</div><</linkreplace>></div>
</div>
</div>
<<else>>
<<if Object.keys($ship.upgrades || {}).length is 0>>
<p class="action-narration">She's behind the desk with a board in the clamps, and she clocks you before the door finishes sliding.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Came back here too soon, huh?</span></div>
<p class="action-narration">The smile happens and is gone about as fast. She kicks something under the desk without looking and the wall behind her wakes up teal.</p>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">Kidding. Mostly. Bench's hot. Pick what you want bolted on and we'll talk numbers.</span></div>
<<else>>
<div class="npc-line is-tsu"><span class="speaker">Tsu</span><span class="speech">You know where the bench is.</span></div>
<p class="action-narration">She doesn't look up. The wall's already lit for you.</p>
<</if>>
<div id="upgrade-root"></div>
<<script>>
setTimeout(function(){
setup.bindUpgradeTree();
setup.upgRefresh();
}, 0);
<</script>>
<div class="ship-actions" style="margin-top:14px;">
<div class="ship-action">
<<link '<span class="action-label">Back to her room</span><span class="action-hint">Through the door</span>'>>
<<goto "TsuShower">>
<</link>>
</div>
</div>
<</if>><<if not $slaveShip>>
<<goto "PlanetSurface">>
<<else>>
<<run setup.stopAmbient('encounter')>>
<<if $slaveShip.state.containmentTripped>>
<div class="ship-header">SEALED SHIP</div>
<div class="ship-desc">
The hatch is bolted and the hull is lit up red from the inside, a slow alarm pulsing behind the viewport. Whatever you tripped in there has the whole thing locked down, and there's no getting back in. Not this run.
</div>
<div class="ship-actions"><div class="ship-action">
<<link '<span class="action-label">Back away</span><span class="action-hint">Leave it screaming</span>'>><<goto "PlanetSurface">><</link>>
</div></div>
<<else>>
<div class="ship-header">PARKED SHIP</div>
<div class="ship-desc">
There's another ship parked here. Same model as yours, same scuffed paint, same shitty quota stickers along the hull. Hatch's been left hanging open and the ramp's down. Nobody outside.
You walk around to the back where the designation is stamped under the thruster vent and read it twice.
</div>
<div class="npc-line is-slave"><span class="speaker">Hull Plate</span><span class="speech"><<print $slaveShip.slave.name.toUpperCase()>></span></div>
<div class="ship-desc">
Another worker. Same contract, different ship, working the same dirt.
</div>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Step inside</span><span class="action-hint">Ramp\'s open</span>'>>
<<set $slaveShip.state.shipEntered to true>>
<<run setup.playSound('hatch_open', { volume: 0.65 })>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<div class="ship-action">
<<link '<span class="action-label">Back away</span><span class="action-hint">Leave them to it</span>'>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<</if>>
<</if>><<if not $slaveShip>>
<<goto "PlanetSurface">>
<<elseif $slaveShip.state.containmentTripped>>
<<goto "SlaveShipApproach">>
<<else>>
<<run setup.stopAmbient('encounter')>>
<div class="ship-header">INSIDE — <<print $slaveShip.slave.name>></div>
<<roomImage "ship_interior">>
<<set _storageCount to $slaveShip.storage.length>>
<<set _slaveAwake to $slaveShip.slave.awake>>
<<set _bunkResolved to $slaveShip.state.bunkResolved>>
<<set _sg to ($slaveShip.slave and $slaveShip.slave.gender) or 'female'>>
<<set _heshe to (_sg eq 'male' ? 'he' : 'she')>>
<<set _heshes to (_sg eq 'male' ? "he's" : "she's")>>
<div class="ship-desc">
<<if _slaveAwake and not _bunkResolved>>
<<print _heshes.charAt(0).toUpperCase() + _heshes.slice(1)>> awake. Sat up on the bunk, watching you. The ship is laid out the same as yours, terminal up at the nose, storage rack against the back wall, narrow bunk slotted into the side. You're standing in someone else's home and <<print _heshes>> the only one in it.
<<elseif _bunkResolved>>
The bunk is empty now. Sheets pulled half off, the room still warm from a body that was here a minute ago. The terminal's dark and the storage rack sits exactly where it was when you walked in.
<<else>>
Same layout as yours. Terminal up at the nose, storage rack bolted against the back wall, narrow bunk slotted into the side. You can hear slow breathing from the bunk. The kind that hasn't moved in a while.
<</if>>
</div>
<div class="ship-actions">
<<if _bunkResolved>>
<div class="disabled-action"><span class="action-label">Check the bunk</span><span class="action-hint">empty</span></div>
<<elseif _slaveAwake>>
<div class="ship-action">
<<link `'<span class="action-label">Talk to ' + (_sg eq 'male' ? 'him' : 'her') + '</span><span class="action-hint">' + (_sg eq 'male' ? "He's" : "She's") + ' watching</span>'`>><<goto "SlaveShipBunkAwake">><</link>>
</div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Check the bunk</span><span class="action-hint">Slow breathing back there</span>'>><<goto "SlaveShipBunkAsleep">><</link>>
</div>
<</if>>
<<if $slaveShip.state.storageRaided or _storageCount eq 0>>
<div class="disabled-action"><span class="action-label">Check the storage</span><span class="action-hint">empty</span></div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Check the storage</span><span class="action-hint"><<print _storageCount>> things stacked back there</span>'>><<goto "SlaveShipStorage">><</link>>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Sit at the terminal</span><span class="action-hint">Chair\'s open, screen\'s lit</span>'>>
<<if setup.slaveShipHasDefense()>>
<<run setup.springContainment('chair')>>
<<goto "ContainmentTrap">>
<<else>>
<<run setup.showUseToast("You drop into the chair. The screen wakes, asks for a print you don't have, and locks you out. Just a chair.")>>
<<goto "SlaveShipInterior">>
<</if>>
<</link>>
</div>
<div class="disabled-action"><span class="action-label">Read the handbook</span><span class="action-hint">not yours to read</span></div>
<div class="disabled-action"><span class="action-label">Sleep</span><span class="action-hint">not your bunk</span></div>
<div class="ship-action">
<<link '<span class="action-label">Leave the ship</span><span class="action-hint">Back out to the surface</span>'>>
<<run setup.playSound('hatch_open', { volume: 0.5 })>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<</if>><<if not $slaveShip>>
<<goto "PlanetSurface">>
<<else>>
<div class="ship-header">STORAGE RACK — <<print $slaveShip.slave.name>></div>
<<if $slaveShip.storage.length eq 0>>
<div class="ship-desc">The rack is empty. Whatever was in here is gone.</div>
<<set $slaveShip.state.storageRaided to true>>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Back to the interior</span>'>><<goto "SlaveShipInterior">><</link>>
</div>
</div>
<<else>>
<div class="ship-desc">
A run's worth of scrap stacked neat against the back wall. Most workers don't bother. This one does.
</div>
<<if setup.slaveShipHasDefense()>><<run setup.markSecuredStorage()>><</if>>
<<if setup.storageHasSecured()>>
<p class="storage-hint-secured">One piece on the rack sits on its own plate with a pink lock blinking on it, bolted to something behind the wall. Lifting that one, or just sweeping the whole rack, is how you find out what this worker rigged up.</p>
<</if>>
<div class="storage-grid">
<<for _si, _sitem range $slaveShip.storage>>
<<capture _si, _sitem>>
<<set _ssIcon to 'Images/items/' + (_sitem.id || 'gold_tooth') + '.png'>>
<<set _ssRowCls to (_sitem.secured ? 'storage-row is-secured' : 'storage-row')>>
<div @class="_ssRowCls">
<div class="storage-img"><img @src="_ssIcon" @alt="_sitem.name"></div>
<div class="storage-info">
<div class="storage-name"><<print _sitem.name>></div>
<div class="storage-val"><<print _sitem.value>> scrap</div>
</div>
<div class="storage-actions">
<<if _sitem.secured>>
<span class="sell-lock-btn is-secured" title="Secured to a sensor plate. Pry it loose and the cabin locks down."><<print setup.ICONS.locked>></span>
<</if>>
<<if setup.cargoFull()>>
<span class="disabled-action">Full</span>
<<elseif _sitem.secured>>
<<link "Take">>
<<run setup.springContainment('storage')>>
<<goto "ContainmentTrap">>
<</link>>
<<else>>
<<link "Take">>
<<run setup.addCargo(_sitem)>>
<<run $slaveShip.storage.splice(_si, 1)>>
<<set $useMessage to 'Took the ' + _sitem.name.toLowerCase() + ' off the rack.'>>
<<goto "SlaveShipStorage">>
<</link>>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
<div class="ship-actions">
<<if setup.cargoFull()>>
<div class="disabled-action"><span class="action-label">Take everything</span><span class="action-hint">backpack full</span></div>
<<else>>
<div class="ship-action">
<<link '<span class="action-label">Take everything that fits</span><span class="action-hint">Sweep the whole rack</span>'>>
<<if setup.storageHasSecured()>>
<<run setup.springContainment('storage')>>
<<goto "ContainmentTrap">>
<<else>>
<<set _takenN to 0>>
<<set _stopAt to -1>>
<<for _gi, _gitem range $slaveShip.storage>>
<<if not setup.cargoCanTake(_gitem.id)>>
<<if _stopAt eq -1>><<set _stopAt to _gi>><</if>>
<<else>>
<<run setup.addCargo(_gitem)>>
<<set _takenN += 1>>
<</if>>
<</for>>
<<if _stopAt gte 0>>
<<run $slaveShip.storage.splice(0, _stopAt)>>
<<else>>
<<set $slaveShip.storage to []>>
<<set $slaveShip.state.storageRaided to true>>
<</if>>
<<set $useMessage to 'Took ' + _takenN + ' off the rack' + (_stopAt gte 0 ? '. Backpack full, rest stays.' : ' and the rack is clean.')>>
<<goto "SlaveShipStorage">>
<</if>>
<</link>>
</div>
<</if>>
<div class="ship-action">
<<link '<span class="action-label">Back to the interior</span>'>><<goto "SlaveShipInterior">><</link>>
</div>
</div>
<</if>>
<</if>>
<<if not $slaveShip or not $slaveShip.slave or $slaveShip.state.roped>>
<<goto "SlaveShipInterior">>
<<else>>
<<set _kdSg to $slaveShip.slave.gender>>
<<set _kdHim to (_kdSg eq 'male' ? 'him' : 'her')>>
<<set _kdHis to (_kdSg eq 'male' ? 'his' : 'her')>>
<<set _kdHes to (_kdSg eq 'male' ? "he's" : "she's")>>
<<set _kdHe to (_kdSg eq 'male' ? 'he' : 'she')>>
<<set _kdCap to { gender: (_kdSg eq 'male' ? 'm' : 'f') }>>
<<set _kdAwake to $slaveShip.slave.awake>>
<<set _kdZone to ($ropeScene and $ropeScene.zone) or null>>
<<if _kdAwake and not _kdZone>>
<div class="ship-header">BUNK — <<print $slaveShip.slave.name>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration"><<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> sees the rope come off your belt and <<print _kdHes>> off the bunk before you've got the first loop in your hand, and the cabin is four steps wide so there's nowhere for either of you to go.</p>
<p class="action-narration is-tense">You get one pass at this.</p>
</div>
</div>
<<run setup.npcShakeFx()>>
<<run setup.openQteBar({
title: 'Get it on them', label: 'THROW IT', greenPct: 11, orangePct: 17, speed: 720,
prompt: 'Tap SPACE when the marker hits the green. Wait for the arms to come down.',
onResult: function(z) {
State.variables.ropeScene = { zone: z };
Engine.play('SlaveShipRope');
}
})>>
<<elseif _kdZone eq 'red'>>
<div class="ship-header">BUNK — <<print $slaveShip.slave.name>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">get OFF-</span></div>
<p class="action-narration is-impact">THE ROPE GOES WIDE</p>
<p class="action-narration">You throw a loop at a shoulder that isn't there any more and <<print _kdHe>> comes up under your arm with <<print _kdHis>> whole weight behind it, and the two of you go into the storage rack hard enough to bring half of it down. By the time you're back on your feet <<print _kdHes>> got the cord in both fists and <<print _kdHes>> standing between you and the bunk.</p>
<p class="action-narration is-tense"><<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> knows exactly what you came in here to do. The cabin is four steps wide and you are the one who brought rope into it.</p>
</div>
<<set _rt to setup.retaliateAct()>>
<div class="scene-advance"><<linkreplace "Get up">>
<div class="npc-scene-step">
<p class="action-narration">You get a knee under you and that's as far as you get. <<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> puts a boot between your shoulders and folds you back down onto the deck plate, and the cord goes round your wrists in the same three turns you were going to use on <<print _kdHim>>.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">no, stay. <span class="whisper">you brought it, we may as well use it</span></span></div>
<<if _rt.pulled>>
<p class="action-narration"><<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> finds the plug through your suit and works it out of you without hurrying, and drops it on the deck where you can hear it roll.</p>
<</if>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.retalPick(_rt.act))>></div>
<<if _rt.who eq 'female'>>
<p class="action-narration">She goes through your kit one-handed while her knee is still on your back, and what she comes up with is the harness. She takes her time buckling it on where you can watch, and the look on her face while she does it is the same one you had walking in here.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">this was going to be your good idea, was it</span></div>
<p class="action-narration">Then she gets a fist in your hair and drags you into position, and she isn't gentle about the first few inches because she isn't trying to be.</p>
<<else>>
<p class="action-narration">He gets your suit open at the back and doesn't bother taking it further than he has to. There's no working up to it. He pins your wrists in the small of your back with the cord already there and pushes in with his whole weight behind it, and the deck plate takes most of the sound you make.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">yeah. <span class="whisper">yeah, that's it</span></span></div>
<</if>>
<<if _rt.caged>>
<p class="action-narration is-cold">The cage doesn't come off. Whatever your body is trying to do about any of this, it does it behind steel and nobody in the room cares.</p>
<</if>>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.retalPick(_rt.cum))>></div>
<<if _rt.who eq 'female'>>
<p class="action-narration">She works up to a pace that has your forehead against the deck and stays there, a forearm across your shoulders, the other hand holding the cord like a rein. You stop tracking how long it goes on for.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">there we go. <span class="whisper">there we go, that's better</span></span></div>
<<else>>
<p class="action-narration">He finishes inside you with his weight still on your back and holds there while it's happening, breathing into the side of your neck. Then he pulls out and lets go of the cord and you stay exactly where he left you because getting up is a decision and you haven't got one in you yet.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">nnh- <span class="whisper">fuck</span></span></div>
<</if>>
<p class="action-narration is-cold">Nobody logs a low-class slave. Nobody comes looking. You knew that walking in. It works the same in both directions and now you have been on the other side of it.</p>
</div>
<div class="scene-advance">
<<link "Find your feet and get off their ship">>
<<run (function(){ var r = setup.captiveFindRope(); if (r) State.variables.ship.cargo.splice(r.idx, 1); })()>>
<<set $player.health to Math.max(1, $player.health - 14)>>
<<set $player.energy to Math.max(0, $player.energy - 22)>>
<<set $player.lust to 0>>
<<run (function(){
try { if (setup.retaliateAct().hole === 'anal' && setup.addMess) setup.addMess('ass', 'cum', 2); } catch (e) {}
})()>>
<<set $slaveShip.state.roped to true>>
<<set $slaveShip.state.ropeFailed to true>>
<<set $slaveShip.state.bunkResolved to true>>
<<set $ropeScene to null>>
<<run setup.advanceMinutes(35)>>
<<run setup.showUseToast("You left your rope in their hands.")>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<<else>>
<div class="ship-header">BUNK — <<print $slaveShip.slave.name>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<<if _kdZone eq 'green'>>
<p class="action-narration">The loop drops over both wrists on the way up and you put your knee in the small of <<print _kdHis>> back and pull, and it's done before <<print _kdSg eq 'male' ? 'he' : 'she'>> has worked out which of you is holding what. Two turns at the elbows, one down through the ankles, and the rest of the cord gets bitten off short.</p>
<<elseif _kdZone eq 'orange'>>
<p class="action-narration">You get it on <<print _kdHim>> but you wear an elbow doing it, hard, right under the eye, and the cabin goes white and loud for a second. You finish the knot anyway with your face throbbing and blood in your teeth, two turns at the elbows and one down through the ankles.</p>
<<set $player.health to Math.max(1, $player.health - 10)>>
<<else>>
<p class="action-narration">You do the wrists first, slow, one at a time, and <<print _kdSg eq 'male' ? 'he' : 'she'>> lets you because <<print _kdSg eq 'male' ? 'he' : 'she'>> is somewhere else entirely. It's only when you cinch the elbows together that the breathing changes.</p>
<</if>>
<p class="action-narration is-cold">Nobody logs a low-class slave. Nobody comes looking. That's the whole thing about the bracket, and it works the same in both directions.</p>
</div>
<div class="scene-advance"><<linkreplace "Wait for the eyes to open">>
<div class="npc-scene-step">
<<set _kdCapClip to setup.captiveClip('capture', _kdCap)>>
<<if _kdCapClip.path>><div class="npc-scene-media"><<print setup.mediaTag(_kdCapClip.path)>></div><</if>>
<p class="action-narration"><<print _kdHes.charAt(0).toUpperCase() + _kdHes.slice(1)>> awake now, up on <<print _kdHis>> knees with the rope holding <<print _kdHis>> arms back and <<print _kdHis>> chest pushed out by it, working <<print _kdHis>> jaw around the gag and getting nothing out but noise. You take a handful of <<print _kdHis>> hair and turn <<print _kdHis>> head until <<print _kdHes>> looking at you, and you hold it there until <<print _kdSg eq 'male' ? 'he' : 'she'>> stops trying to look away.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech">mmh- <span class="whisper">mmhh</span></span></div>
<p class="action-narration"><<print _kdSg eq 'male' ? 'He' : 'She'>> knows the word for this. So do you. Neither of you has anywhere to file it.</p>
</div>
<<set _kdAct to setup.captiveAct(_kdCap)>>
<<if _kdAct.ok>>
<div class="scene-advance rope-optional"><<linkreplace "Take something for the trouble">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_kdAct.pool))>></div>
<<if _kdAct.key eq 'fuck' and _kdAct.hole eq 'vag'>>
<p class="action-narration">You put <<print _kdHim>> face down on the bunk <<print _kdHes>> been asleep in and take <<print _kdHim>> there, with the rope doing all the work of holding <<print _kdHim>> still and your hand set between <<print _kdHis>> shoulders out of habit. <<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> is wet before you're halfway in and the noise <<print _kdHe>> makes into the mattress goes on the whole time.</p>
<<elseif _kdAct.key eq 'fuck'>>
<p class="action-narration">You put <<print _kdHim>> face down on the bunk <<print _kdHes>> been asleep in, spit once, and work into <<print _kdHis>> ass with the rope doing all the work of holding <<print _kdHim>> still. It's tight and it stays tight and <<print _kdHe>> screams into the gag on the first full push, and then <<print _kdHe>> just takes it.</p>
<<elseif _kdAct.key eq 'hand'>>
<p class="action-narration">You get a hand around him and work him, slow at first because the angle is awkward with his arms roped back, then not slow. He's hard well before he's willing to admit it and the gag turns everything he wants to say about that into noise. It doesn't take long. He shuts his eyes near the end and keeps them shut after, breathing through his nose, and you wipe your hand off on his own shirt.</p>
<<elseif _kdAct.key eq 'strap'>>
<p class="action-narration">The harness is already on your hips and <<print _kdHes>> had it in <<print _kdHis>> eyeline since the rope went tight. You roll <<print _kdHim>> onto <<print _kdHis>> front on the bunk, get a knee between <<print _kdHis>> thighs and push in. <<print _kdHis.charAt(0).toUpperCase() + _kdHis.slice(1)>> arms are still cinched behind <<print _kdHim>>, so every stroke puts <<print _kdHis>> face in the mattress, and the sound <<print _kdHe>> makes into it goes on until you're finished.</p>
<<else>>
<p class="action-narration">You dig the <<print setup.itemProseName(_kdAct.item)>> out of your bag and work it into <<print _kdHim>> without much ceremony, then thumb it on and leave it there. <<print _kdHe.charAt(0).toUpperCase() + _kdHe.slice(1)>> makes a sound through the gag that isn't a word and the rope stops <<print _kdHim>> doing anything about any of it. You sit back on the storage rack and let the thing work while you go through <<print _kdHis>> shelves.</p>
<</if>>
<p class="action-narration">When you're done you stay where you're for a bit, breathing, and the ship ticks and cools around the two of you like nothing happened in it.</p>
<<set $player.lust to Math.max(0, $player.lust - 45)>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run setup.advanceMinutes(20)>>
<<if _kdAct.key eq 'toy'>><<run setup.captiveSpendToy(_kdAct.item)>><</if>>
<<if _kdAct.key eq 'fuck'>><<run (function(){ if (setup.addMess) setup.addMess('crotch', 'cum'); })()>><</if>>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off rope-optional">
<span class="sa-label">Take something for the trouble</span>
<span class="sa-why"><<= _kdAct.why>></span>
</div>
<</if>>
<div class="scene-advance is-keep"><<linkreplace "Get the rope in your fist and walk them out">>
<<run document.querySelectorAll('.rope-optional').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.captiveClip('haul', _kdCap).path)>></div>
<p class="action-narration">You get a fist in the cord between <<print _kdHis>> shoulder blades and walk <<print _kdHim>> out of <<print _kdHis>> own hatch, and <<print _kdSg eq 'male' ? 'he' : 'she'>> goes because the alternative is being dragged. Halfway across the rocks <<print _kdSg eq 'male' ? 'he' : 'she'>> stops trying to plant <<print _kdHis>> feet and just walks, head down, and the two of you cover the rest of the ground like a pair of people going to work.</p>
<p class="action-narration is-cold"><<print _kdHis.charAt(0).toUpperCase() + _kdHis.slice(1)>> ship sits open behind you with the lights still on. Nothing about the surface changes. Nothing was ever watching it.</p>
</div>
<div class="scene-advance">
<<link "Put them in the hold">>
<<set _kdTook to setup.captiveTake()>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $ropeScene to null>>
<<run setup.advanceMinutes(25)>>
<<run setup.playSound('hatch_open', { volume: 0.5 })>>
<<run setup.showUseToast("Tied off in the storage bay. Get them to the barn on Lubea-21.", { variant: 'hint', dwell: 4600 })>>
<<goto "PlanetSurface">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<</if>>
<</if>><<if not $slaveShip or $slaveShip.slave.awake>>
<<goto "SlaveShipInterior">>
<<else>>
<<if $slaveShip.slave.gender eq 'male'>>
<<goto "SlaveShipBunkAsleepMale">>
<</if>>
<<set $slaveShip.state.bunkApproached to true>>
<<set _pg to ($body and $body.gender) or 'male'>>
<<set _intactMale to (_pg eq 'male' and not setup.isCaged())>>
<div class="ship-header">BUNK — <<print $slaveShip.slave.name>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_sleeping_f'))>></div>
<p class="action-narration">She's curled half-on her side with one arm bent under her head and the other dropped off the edge of the bunk. Whatever she was wearing came partway off in her sleep and she didn't fix it. Mouth slightly open. Breathing slow.</p>
<p class="action-narration is-cold">She doesn't know you're standing here. She doesn't know anyone is.</p>
</div>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Move closer">>
<<run document.querySelectorAll('#bunk-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_touch_chest_f'))>></div>
<p class="action-narration">You sit on the edge of the bunk and your weight on the mattress doesn't even register. You put your hand on her chest and take a slow handful. She doesn't move. Her breath shifts a fraction and that's it.</p>
</div>
<div class="scene-advance"><<linkreplace "Lower">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_touch_lower_f'))>></div>
<p class="action-narration">You ease her waistband down off her hips. Pale skin, smell of someone who hasn't washed since the last station and a faint sleep-warm on top of that. You put your face close and she still doesn't move.</p>
</div>
<div class="scene-advance"><<linkreplace "Slide a finger in">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_touch_finger_f'))>></div>
<p class="action-narration">You work a finger in slow. She isn't wet, not really, but she isn't closed off either, and the slow push goes in further than you'd have guessed before her cunt starts clutching at you in her sleep, soft and wet and rhythmic.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mhh..</span></span></div>
<p class="action-narration is-tense">She doesn't wake.</p>
</div>
<<if _intactMale>>
<div class="scene-advance"><<linkreplace "Pull yourself out and line it up">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_penetrate_pussy_f'))>></div>
<p class="action-narration">You undo your suit one-handed, pull your cock out, and line yourself up against the slick you just made. The first inch she's tight in a way that fights you, then her body just gives, and you sink the rest of the way until your hips are flush against the back of her thighs.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">ah-</span></span></div>
<p class="action-narration">Her breath catches once and then evens out, mouth still slack against the pillow.</p>
<p class="action-narration is-cold">She's still sleeping. You're inside her and she's still sleeping.</p>
</div>
<div class="scene-advance"><<linkreplace "Take what you came for">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_creampie_pussy_f'))>></div>
<p class="action-narration">You work yourself in and out at a pace that won't wake her, hand pressed flat on her hip to keep her from drifting across the mattress. Her cunt clutches at you in her sleep, wet and rhythmic, the noise of it loud in a room where she should be the only one making any.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mh.. mhh..</span></span></div>
<p class="action-narration">It takes longer than you'd hoped. When you finally pull out a slow trail comes back down her thigh onto the sheet, and she shifts once and doesn't open her eyes.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Leave her like that">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Stop here and zip back up">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 12)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance"><<linkreplace "Push your face down and taste her">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_sleeping_oral'))>></div>
<p class="action-narration">You bend down between her thighs. The smell hits you first, sleep-warm and slick, and you lean the rest of the way in. Your tongue starts slow across her labia and works up until it finds her clit, and her whole lower half flexes against your mouth before you've even pressed in.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">nh-</span></span></div>
<p class="action-narration is-cold">She doesn't wake. Her hand twitches against the mattress and falls back.</p>
</div>
<div class="scene-advance"><<linkreplace "Make her come on your tongue">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_sleeping_oral_finish'))>></div>
<p class="action-narration">You work her with your tongue and two fingers at once, slow and steady, watching her face for any sign she's waking up. She doesn't. What she does is start clenching around your fingers in slow rhythmic pulses, breath getting shallow, hips lifting a fraction off the mattress, and then she goes tight and wet and you ride it out with your mouth pressed against her until she finally goes slack.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mh.. mhh..</span></span></div>
<p class="action-narration is-cold">She finished in her sleep and she doesn't know yet. You wipe your mouth on the back of your hand and slip your fingers out of her. A wet trail comes with them.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Pull her waistband back up and leave her like that">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Wipe your mouth and pull back">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 14)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Pull your hand away and step off the bunk">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 8)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</if>>
<div class="scene-advance bunk-step-exit">
<<link "Pull your hand back and leave her be">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 6)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Pull her waistband back up and step away">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 4)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Take your hand off her and back away">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div id="bunk-outer-choices">
<div class="scene-advance">
<<link "Wake her up instead">>
<<set $slaveShip.slave.awake to true>>
<<goto "SlaveShipBunkAwake">>
<</link>>
</div>
<div class="scene-advance">
<<link "Back away clean">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
</div>
</div>
<</if>><<if not $slaveShip>>
<<goto "PlanetSurface">>
<<else>>
<<if $slaveShip.slave.gender eq 'male'>>
<<goto "SlaveShipBunkAwakeMale">>
<</if>>
<<set $slaveShip.slave.awake to true>>
<<set _per to $slaveShip.slave.personality>>
<<set _sname to $slaveShip.slave.name>>
<<set _pg to ($body and $body.gender) or 'male'>>
<<set _intactMale to (_pg eq 'male' and not setup.isCaged())>>
<div class="ship-header">BUNK — <<print _sname>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration">She sits up fast, sheet falling, and gets her eyes on you in the half-second before her brain catches up. The recognition is a flat line. You're not her, you're not the company, you're a problem.</p>
<<if _per eq 'scared'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Please. Please don't take it. I'm one warning away from the airlock. Anything you want, I will give you, just don't gut the rack.</span></div>
<p class="action-narration is-cold">Her hands are up in front of her chest before she even decides to put them there.</p>
<<elseif _per eq 'cocky'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Out of my ship before I bury something in your face. I know you can hear me, freak.</span></div>
<p class="action-narration">She doesn't reach for a weapon because she doesn't have one. The threat is the loudest thing she's got and she knows it, and you watch the recognition land on her face right after the words.</p>
<<elseif _per eq 'horny'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Mh. You took your time, didn't you. I'd been wondering when this run would get interesting.</span></div>
<p class="action-narration">She doesn't cover up. She stretches, leans back against the bulkhead, and looks you over from your boots to your face like she's pricing you.</p>
<<else>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">...what time is it. I just laid down. Did you bring fuel or are you here to fuck or what.</span></div>
<p class="action-narration">She rubs her eyes with the heels of her hands. She's not scared and she's not happy. She's on the same shift you are.</p>
<</if>>
</div>
<<if _intactMale and not $slaveShip.state.bunkResolved>>
<<ropeOption>>
<<if not ($player.gear and $player.gear.gag)>>
<div class="scene-advance" id="awake-oral-choice"><<linkreplace "Get your mouth on her first">>
<<run document.querySelectorAll('#awake-outer-choices, #awake-take-choice').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_female_recv_oral'))>></div>
<p class="action-narration">You get her knees apart before she's finished deciding whether to be annoyed about it, and she stops deciding somewhere in the first minute. Her heel finds your back and stays there.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">oh- oh you're actually- mmh-</span></div>
<p class="action-narration">She works against your mouth harder than she means to and doesn't apologise for it, and when she goes she does it with both hands knotted in the bedding and her thighs shut around your ears.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">nnh- NNH- f-fuck fuck fuck-</span></div>
<p class="action-narration">She comes apart all at once and lies there breathing at the ceiling with one arm over her eyes.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">okay. okay, get up here.</span></div>
<div class="scene-advance"><<linkreplace "Let her return it">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_female_partner_ride'))>></div>
<p class="action-narration">She puts you on your back with a hand spread over your chest and takes her time about it. She sets the pace and keeps it exactly where she wants it the whole way.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">no- no, you don't get to- I'm doing this bit-</span></div>
<p class="action-narration">She finishes what she started on top of you and doesn't get off straight away.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Find your suit">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Get your mouth on her first</span><span class="sa-why">not through the gag</span></div>
<</if>>
<div class="scene-advance" id="awake-take-choice"><<linkreplace "Push her flat and take her">>
<<run document.querySelectorAll('#awake-outer-choices, #awake-oral-choice').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _sexPool to (_per eq 'horny')
? ['shared_female_partner_ride', 'shared_female_partner_ride', 'slave_awake_cowgirl_f']
: (_per eq 'tired')
? ['shared_female_partner_vag', 'shared_female_partner_vag', 'slave_awake_pussy_f']
: ['shared_female_partner_vag', 'shared_female_partner_vag', 'slave_awake_doggy_f']>>
<<set _pickPool to _sexPool[Math.floor(Math.random() * _sexPool.length)]>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_pickPool))>></div>
<<if _per eq 'scared'>>
<p class="action-narration">She doesn't fight. She lets you turn her how you want, lets her shoulders hit the mattress when you push them down, and when you get inside her she catches her breath and holds it for a second too long.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">p-please-</span></span></div>
<p class="action-narration">It isn't loud enough to be a real protest and you don't stop. She makes small sounds into the bedding the rest of the way, none of them words, and her hands stay flat against the mattress on either side of her head.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">a-ah.. ahh..</span></span></div>
<p class="action-narration is-cold">When you finish she hasn't moved from where you put her. There's a wet patch under her hip on the sheet that wasn't there a minute ago.</p>
<<elseif _per eq 'cocky'>>
<p class="action-narration">She fights you for two seconds and then she fights you for not enough seconds, and then she's pinned face-down with one of your hands at the back of her neck and your hips locked against hers.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">get the fuck off me- I swear to- AH-</span></div>
<p class="action-narration">You take her hard and she's loud about it whether she means to be or not. The threats go first, then the syntax, then the consonants.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">fuck you fuck- f-fuck FUCK I'm-</span></div>
<p class="action-narration">She goes tight around you mid-curse and her cheek slides flat against the mattress as she shakes through it.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mphhhhh-</span></div>
<p class="action-narration is-impact">You finish on her back. She lays there breathing wet against the sheet for a long time without saying anything.</p>
<<elseif _per eq 'horny'>>
<p class="action-narration">She climbs on you faster than you climb on her. Her hands are everywhere before your suit's halfway off and her mouth picks up the work after that, sloppy and wet and impatient.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">f-fuck I've been on this rock four days I'm done waiting-</span></div>
<p class="action-narration">She gets you flat on the bunk and rides you hard, hips slapping forward into yours, tits bouncing against her ribs each time she drops.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">there- THERE- right fucking there- mhhhh-</span></div>
<p class="action-narration">Her cunt clenches once, then locks down hard enough you almost push out of her, and then breaks open into spasms.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">FUCK FUCK F-FUCK I'M- AhHHHhh-</span></div>
<p class="action-narration">You finish across her stomach. She slumps off your hips a second after you do, sweat on her forehead. She leaves it there.</p>
<<else>>
<p class="action-narration">She lays back and lets it happen with the same energy she had when she woke up. You bury yourself in her and her hips meet you halfway. Tired sex. Two workers on the same quota. The bed was already there.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mmh.. yeah.. there..</span></div>
<p class="action-narration">She comes quiet, eyes closed, one hand resting on your shoulder and the other tucked under her cheek like she's about to fall back asleep in the middle of you finishing in her.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">..fuck..</span></div>
<p class="action-narration is-cold">When you pull out she rolls onto her side and pulls her sheet halfway up.</p>
<</if>>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Finish and roll off">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<<elseif _pg eq 'male' and setup.isCaged() and not $slaveShip.state.bunkResolved>>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Let her see the cage">>
<<run document.querySelectorAll('#awake-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<p class="action-narration">She gets your suit open before you've agreed to it and then stops, and you watch her work out what she's looking at. She doesn't laugh.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">huh. company issue?</span></div>
<div class="npc-line is-you"><span class="speaker">You</span><span class="speech">something like that.</span></div>
<p class="action-narration">She sits back on her heels and thinks about it for a second, and then she's off the bunk and going through the locker behind her without explaining herself.</p>
<div class="scene-advance"><<linkreplace "Ask what she's looking for">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_female_strapon_wear'))>></div>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">four days out here. you think you're the first thing I packed for?</span></div>
<p class="action-narration">She buckles it on standing up, without hurrying, and she watches your face the whole time she's doing it.</p>
<div class="scene-advance"><<linkreplace "Turn over">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_caged'))>></div>
<<if _per eq 'cocky'>>
<p class="action-narration">She isn't gentle about it and she doesn't pretend she's going to be. She gets a hand between your shoulders and sets you how she wants, and the cage takes everything you can't do anything with.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">there we go. there's the noise.</span></div>
<<elseif _per eq 'scared'>>
<p class="action-narration">She's careful with you in a way that makes it last longer, one hand resting on your lower back the whole time, and the cage aches against the mattress every time she moves.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">shh. shh. you're alright.</span></div>
<<else>>
<p class="action-narration">She finds the pace she wants inside a minute and stays on it, and you end up with your face in someone else's bedding making sounds you'd rather she didn't hear. The cage stays exactly as full and as useless as it was when she started.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">yeah. yeah, that's it-</span></div>
<</if>>
<p class="action-narration is-cold">You don't finish, because you can't. She does, against your back, and she leaves the cage alone the entire time like she'd already decided that part wasn't hers to open.</p>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 20)>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Find your suit">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<<elseif _pg eq 'female' and not $slaveShip.state.bunkResolved>>
<div class="scene-advance"><<linkreplace "Pin her down and have her">>
<<run document.querySelectorAll('#awake-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<if _per eq 'scared'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_touch_underwear'))>></div>
<p class="action-narration">She freezes when you climb on her, hands rising halfway and then dropping back to the bunk like she remembered halfway up that she has no leverage. You kiss her shoulder, then her throat, then her mouth, and her lips move against yours but don't fight you.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">w-wait-</span></span></div>
<p class="action-narration">You don't. Your hand slides down to the front of her panties and works her clit through the cotton, slow circles that get her hips moving before her face catches up.</p>
<div class="scene-advance"><<linkreplace "Pull the cotton aside">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_awake_oral_back'))>></div>
<p class="action-narration">You go down on her. She is already slick. Her thighs lock around your head for one second and then go loose, and she comes against your tongue without a single intentional sound.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">m-mhh-</span></span></div>
<p class="action-narration is-cold">When you sit back her thighs are still shaking and she won't look at you. There's a wet spot on the sheet between her hips.</p>
<</linkreplace>></div>
<<elseif _per eq 'cocky'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_rough_restrained'))>></div>
<p class="action-narration">She fights you for two seconds and then she fights you for not enough seconds, and you've got her shoulders down with one hand and her wrist twisted up over her head with the other. She tries to bite. You catch her jaw and clamp your palm flat across her mouth.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mmphh- get the f-</span></div>
<p class="action-narration">You walk two fingers down between her ass cheeks while she's still trying to spit insults into your palm. The first knuckle goes in dry and she goes rigid under you. The second one goes in slick because she's wetter than she wants to admit.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mphHHH- f-fck- FUCK-</span></div>
<p class="action-narration">You finger-fuck her ass hard and steady while she clenches and twists under your hand. Her hips start meeting yours about thirty seconds in whether she means to or not.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mmphhhh- I'M- mhhh-</span></div>
<p class="action-narration is-impact">She comes against your fingers with her teeth still gritted against your palm. You hold her down a full minute after, until her shoulders give and her breath goes ragged and steady. Then you let her face turn sideways and she just lays there.</p>
<<elseif _per eq 'horny'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_awake_69'))>></div>
<p class="action-narration">She climbs on top of you before you finish closing the bunk curtain. Her mouth lands on yours and her hand goes between your thighs at the same time, and you're not even sure which of you got naked first.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">fuck you took your time-</span></div>
<p class="action-narration">She swings her hips around so her mouth's on your pussy and yours is on hers and you both go at it without breaking pace. She moans into you and the vibration runs all the way up through your spine.</p>
<div class="scene-advance"><<linkreplace "Let her take over">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_awake_kiss_finger'))>></div>
<p class="action-narration">She flips you onto your back when she can't take any more, slides four fingers into you, and licks her way back up your stomach to your mouth. Her hand stays where it is, working you in and out, while her tongue is in your mouth.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">come on- fucking come on me-</span></div>
<p class="action-narration">You come against her fingers and into her mouth at the same time and it's loud and wet and she pulls her hand out of you slow afterward, watching the trail it leaves.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mhhh- yeah-</span></div>
<p class="action-narration">She wipes her fingers across your stomach and grins down at you like she just stole something.</p>
<</linkreplace>></div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_f_awake_oral_combo'))>></div>
<p class="action-narration">She lays back and pulls you down with her without saying anything. You work your way down her body, mouth on her shoulder, then her chest, then her stomach, and she shifts her hips to make room for you between her thighs.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mmh.. yeah..</span></div>
<p class="action-narration">You go down on her slow. Two fingers in, tongue working her clit, nothing rushed. She moves under you in small waves, breath getting heavier the longer you stay there.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">don't.. don't stop..</span></div>
<p class="action-narration">You don't. She comes quiet, hand resting on the top of your head like she just wants to feel you there. Her hips lift once and settle, and then she lets you go.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">..fuck..</span></div>
<p class="action-narration is-cold">When you sit up she's still got her eyes closed. Her hand drops off your head and lands on her stomach.</p>
<</if>>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Wipe your mouth and get up off her">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</if>>
<div id="awake-outer-choices">
<div class="scene-advance">
<<link "Back off the bunk and leave her sitting">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
</div>
</div>
<</if>><<if not $intruder>>
<<goto "Ship">>
<<else>>
<<if $intruder.gender eq 'male' and $intruder.race eq 'white'>>
<<goto "WetoleIntruderWhiteMale">>
<</if>>
<<if $intruder.gender eq 'female'>>
<<goto "WetoleIntruderFemale">>
<</if>>
<<run setup.stopAmbient('encounter')>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.4 })>>
<<set _g to ($body and $body.gender) or 'male'>>
<<set _isFem to (_g eq 'female')>>
<<set _isFemboy to (_g eq 'male' and ($player.fem or 0) gte 30)>>
<<set _bodyStatic to _isFem ? 'player_sleeping_f' : (_isFemboy ? 'player_sleeping_femboy' : 'player_sleeping_m')>>
<<set _iname to $intruder.name>>
<div class="ship-header">SHIP INTERIOR — NIGHT</div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_bodyStatic))>></div>
<p class="action-narration">You're under, mostly. The bunk is hard against your back and the ship hums quiet around you. Far enough from the surface that the hatch alarm is the only thing that wakes you sometimes, and it isn't going off now.</p>
<p class="action-narration is-cold">The hatch was unlocked. You left it that way because you don't share this planet with anything except other workers, and other workers don't bother you.</p>
</div>
<div class="scene-advance"><<linkreplace "Continue">>
<<run document.querySelectorAll('#intruder-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<p class="action-narration">Something settles onto the mattress next to your hip and the whole frame creaks under a second weight. You feel a hand on your inner thigh before your brain catches up to the fact that you're not alone.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">shh.. shh.. you sleep that hard you don't deserve to wake up..</span></div>
<p class="action-narration is-tense">The voice is low, calm, not trying to hide. Another worker. He came in through your hatch and you didn't hear any of it.</p>
</div>
<<if _isFem>>
<div class="scene-advance"><<linkreplace "Open your eyes">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('player_recv_bbc_wake_worship'))>></div>
<p class="action-narration">You roll your head and see him. Big. Black. Suit halfway off. His cock is already out of his pants and he's holding it close enough to your face that the smell hits you first, hot and skin-warm.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there she is.. open up..</span></div>
<p class="action-narration">He doesn't wait for you to. His thumb finds your jaw and your mouth opens for him whether you decided to or not.</p>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _fpool to ['player_recv_bbc_pussy', 'player_recv_bbc_cowgirl', 'player_recv_bbc_anal_f', 'player_recv_bbc_deepthroat', 'player_recv_bbc_throat_pin']>>
<<set _fpoolKey to _fpool[Math.floor(Math.random() * _fpool.length)]>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_fpoolKey))>></div>
<p class="action-narration">He goes in slow at first and then not, hand splayed on your hip pinning you against the wall of the bunk, your back arched off the mattress every time he bottoms out. Wet noise and bedframe noise and the broken sounds you keep making before you can stop yourself.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">a-ah.. ah- AH-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">fuck you're tight for someone who sleeps with the hatch open..</span></div>
<p class="action-narration is-tense">You feel the rhythm shift, faster and shallower, his hand tightening on your thigh.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">f-fuck I'm- I-</span></div>
</div>
<div class="scene-advance"><<linkreplace "Let it happen">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _creamRoll to Math.random()>>
<<set _creamKey to (_creamRoll lt 0.4) ? 'player_recv_bbc_creampie_pussy' : (_creamRoll lt 0.75) ? 'player_recv_bbc_creampie_anal' : 'player_recv_bbc_facial'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_creamKey))>></div>
<p class="action-narration is-impact">He locks all the way in and you feel the first pulse, then the second, and your own body goes off around him without permission.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">FUCK F-FUCK I'M- AhHHHhh-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there it is.. swallow it..</span></div>
<p class="action-narration">He stays in until he's done, then pulls out slow, and you feel a trail come out the second he does.</p>
</div>
<div class="scene-advance"><<linkreplace "Lay there">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_creampie_drip_f'))>></div>
<p class="action-narration is-cold">You hear him zipping back up. Boots on the deck. A pause at your storage rack, then a second pause. Then the hatch sealing behind him on the way out.</p>
<p class="action-narration">You don't move for a long time. The bunk is wet under you and your hip is starting to ache where his hand was.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<if setup.bumpFem>><<run setup.bumpFem(6)>><</if>>
<<run setup.stealCargo and setup.stealCargo(2)>>
<<set $intruder to null>>
</div>
<div class="scene-advance">
<<link "Sit up">>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance"><<linkreplace "Try to move">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _bbcTouchKey to (_isFemboy and Math.random() lt 0.5) ? 'player_recv_bbc_male_touch' : 'player_recv_bbc_throat_pin'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_bbcTouchKey))>></div>
<p class="action-narration">You don't get far. One of his hands lands flat on the back of your head and pushes your face into the pillow, the other one yanks your hips up off the mattress.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">you keep that ass right there..</span></div>
<p class="action-narration is-tense">You feel his cockhead drag once between your cheeks and find what it's looking for.</p>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('player_recv_bbc_male_anal'))>></div>
<p class="action-narration">He pushes in dry-ish and the stretch makes you grunt against the pillow, and then he doesn't wait, hips slapping into the back of your thighs in a hard pace from the first thrust onward.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">f-fuck- ah- AH-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">you take it good.. fucking quiet boys always do..</span></div>
<p class="action-narration">He fucks you face-down ass-up until the rhythm starts staggering, his hand twisted in the back of your suit and his weight on your shoulders pinning you flat to the mattress.</p>
</div>
<div class="scene-advance"><<linkreplace "Let it happen">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('player_recv_bbc_male_creampie'))>></div>
<p class="action-narration is-impact">He buries deep and holds and you feel the first hot pulse inside you, then a second, then a third before he stops counting.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">mphhhhh-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there.. all yours..</span></div>
<p class="action-narration">He pulls out slow and you feel a thick trail follow him out of you and onto the back of your thigh.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<if setup.bumpFem>><<run setup.bumpFem(6)>><</if>>
<<run setup.stealCargo and setup.stealCargo(2)>>
<<set $intruder to null>>
</div>
<div class="scene-advance"><<linkreplace "Stay down">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<p class="action-narration is-cold">You hear him zipping back up. Boots on the deck. A pause at your storage rack, then a second pause. Then the hatch sealing behind him on the way out.</p>
<p class="action-narration">You don't move for a long time. Your ass aches in a way that's going to take more than a shower to settle and your sheet is wet under your hip.</p>
</div>
<div class="scene-advance">
<<link "Sit up">>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</if>>
<</linkreplace>></div>
</div>
<</if>><<if not $slaveShip or $slaveShip.slave.awake or $slaveShip.slave.gender neq 'male'>>
<<goto "SlaveShipInterior">>
<<else>>
<<set $slaveShip.state.bunkApproached to true>>
<<set _pg to ($body and $body.gender) or 'male'>>
<<set _intactMale to (_pg eq 'male' and not setup.isCaged())>>
<<set _touchPool to (_intactMale ? 'mm_white_sleeping_touch' : 'mm_white_sleeping_touch_nocock')>>
<div class="ship-header">BUNK — <<print $slaveShip.slave.name>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_sleeping_m'))>></div>
<p class="action-narration">He's face-down in the bunk with one arm slung up over his head and the other dropped off the edge. The sheet's tangled somewhere around his hips and didn't make it any further before he passed out. Breathing slow and heavy.</p>
<p class="action-narration is-cold">He doesn't know you're standing here. He doesn't know anyone is.</p>
</div>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Move closer">>
<<run document.querySelectorAll('#bunk-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_m_sleeping_touch'))>></div>
<p class="action-narration">You sit down on the edge of the bunk and your weight on the mattress doesn't even register with him. Your hand goes flat on the small of his back, warm through the fabric, and you let it sit there a second before you hook your fingers in the waistband and ease it down off him. He doesn't move.</p>
</div>
<div class="scene-advance"><<linkreplace "Lower">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_touchPool))>></div>
<p class="action-narration">You drag the sheet the rest of the way off him and reach underneath. He's soft against your palm and warm from sleeping, and you stroke him once, slow, then twice. He thickens up in your hand without waking.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mhh..</span></span></div>
</div>
<div class="scene-advance"><<linkreplace "Slide a finger into him">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_m_sleeping_finger'))>></div>
<p class="action-narration">You spit on your fingers and work one in slow. He's tight in a way that fights you for half a second and then opens up. The second finger goes in easier, and you feel him start to grip around them in his sleep.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">nh-</span></span></div>
<p class="action-narration is-tense">He doesn't wake.</p>
</div>
<<if _intactMale>>
<div class="scene-advance"><<linkreplace "Pull yourself out and line it up">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_awake_back'))>></div>
<p class="action-narration">You undo your suit one-handed, line yourself up, and press in slow. The first inch he's tight in a way that fights you and then his body just gives, and you sink the rest of the way until your hips are flush against the back of his thighs.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">ah-</span></span></div>
<p class="action-narration">His breath catches once and then evens out, head still turned toward the wall.</p>
<p class="action-narration is-cold">He's still sleeping. You're inside him and he's still sleeping.</p>
</div>
<div class="scene-advance"><<linkreplace "Take what you came for">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_creampie'))>></div>
<p class="action-narration">You work yourself in and out at a pace that won't wake him, palm flat against the small of his back. He clenches around you in his sleep, wet and rhythmic, and the noise of it's loud in a room where he should be the only one making any.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mh.. mhh..</span></span></div>
<p class="action-narration">It takes longer than you'd hoped. When you finally pull out a slow trail of your cum runs down the back of his thigh onto the sheet, and he shifts once and doesn't open his eyes.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Pull the sheet back over him and leave">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Stop here and zip back up">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 12)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<<else>>
<<if not setup.blocksMouth()>>
<div class="scene-advance"><<linkreplace "Put your mouth on him">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_f_m_sleeping_oral'))>></div>
<p class="action-narration">You slide off the edge of the bunk down onto the deck plate, which puts your knees on cold steel and his hip right at eye level. You take him into your mouth slow and go all the way down until your nose is against him, and you hold there until your eyes water.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">mhh..</span></span></div>
<p class="action-narration">You work him with your tongue and your hand together, wet and unhurried, because there's no rush and nobody in this room is going to tell you to stop. *slurrrp* His hips lift off the mattress once, chasing it in his sleep, and you follow him up and keep going.</p>
</div>
<div class="scene-advance"><<linkreplace "Finish him in your mouth">>
<<run document.querySelectorAll('.bunk-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<p class="action-narration">He goes off without ever properly waking, one hand closing into the sheet beside his head while the rest of him stays exactly where it was. You take all of it and swallow, because spitting it onto his deck would leave a mark somebody could read later.</p>
<div class="npc-line is-slave"><span class="speaker"><<print $slaveShip.slave.name>></span><span class="speech"><span class="whisper">nh.. mh..</span></span></div>
<p class="action-narration is-cold">You sit back on your heels and wipe your mouth on the back of your wrist. He's already settling again, mouth open, arm still slung over his head where it started.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 8)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Wipe your mouth and leave him sleeping">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</if>>
<div class="scene-advance bunk-step-exit">
<<link "Pull your hand away and step off the bunk">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 8)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</if>>
<div class="scene-advance bunk-step-exit">
<<link "Take your fingers out and leave him be">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 6)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Cover him back up and step away">>
<<set $player.lust to Math.min(100, ($player.lust or 0) + 4)>>
<<set $slaveShip.state.bunkResolved to true>>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div class="scene-advance bunk-step-exit">
<<link "Take your hand off him and back away">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<div id="bunk-outer-choices">
<div class="scene-advance">
<<link "Wake him up instead">>
<<set $slaveShip.slave.awake to true>>
<<goto "SlaveShipBunkAwakeMale">>
<</link>>
</div>
<div class="scene-advance">
<<link "Back away clean">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
</div>
</div>
<</if>><<if not $slaveShip or $slaveShip.slave.gender neq 'male'>>
<<goto "PlanetSurface">>
<<else>>
<<set $slaveShip.slave.awake to true>>
<<set _per to $slaveShip.slave.personality>>
<<set _sname to $slaveShip.slave.name>>
<<set _pg to ($body and $body.gender) or 'male'>>
<<set _intactMale to (_pg eq 'male' and not setup.isCaged())>>
<<set _pegger to (_pg eq 'female' and $player.gear and $player.gear.chastity and $player.gear.chastity.id eq 'strap_on')>>
<<set _rider to (_pg eq 'female' and not _pegger)>>
<div class="ship-header">BUNK — <<print _sname>></div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration">He sits up fast, sheet falling, and gets his eyes on you in the half-second before his brain catches up. The recognition is a flat line. You're not him, you're not the company, you're a problem.</p>
<<if _per eq 'scared'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Please. Please don't take it. I'm one warning away from the airlock. Anything you want, I will give you, just don't gut the rack.</span></div>
<p class="action-narration is-cold">His hands come up in front of his chest before he even decides to put them there.</p>
<<elseif _per eq 'cocky'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Out of my ship before I bury something in your face. I know you can hear me.</span></div>
<p class="action-narration">He doesn't reach for a weapon because he doesn't have one. The threat is the loudest thing he's got and he knows it, and you watch the recognition land on his face right after the words.</p>
<<elseif _per eq 'horny'>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">Mh. You took your time, didn't you. I'd been wondering when this run would get interesting.</span></div>
<p class="action-narration">He doesn't cover up. He stretches, leans back against the bulkhead, and looks you over from your boots to your face like he's pricing you.</p>
<<else>>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">...what time is it. I just laid down. Did you bring fuel or are you here to fuck or what.</span></div>
<p class="action-narration">He rubs his eyes with the heels of his hands. He's not scared and he's not happy. He's on the same shift you are.</p>
<</if>>
</div>
<<if _intactMale and not $slaveShip.state.bunkResolved>>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Pin him down and take him">>
<<run document.querySelectorAll('#awake-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<if _per eq 'scared'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_awake_back'))>></div>
<p class="action-narration">He doesn't fight. He lets you push him down on his back, lets you pull his legs up against his chest, and when you push into him he catches his breath and holds it for a second too long.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">p-please-</span></span></div>
<p class="action-narration">It isn't loud enough to be a real protest and you don't stop. He makes small sounds into the pillow the rest of the way, none of them words, hands flat against the mattress on either side of his head.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">a-ah.. ahh..</span></span></div>
<div class="scene-advance"><<linkreplace "Finish inside him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_creampie'))>></div>
<p class="action-narration is-cold">He is still folded where you put him. There is a wet trail running down his thigh that was not there a minute ago.</p>
<</linkreplace>></div>
<<elseif _per eq 'cocky'>>
<<set _cockyPool to (Math.random() lt 0.5) ? 'mm_white_awake_doggy' : 'mm_white_awake_back_force'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_cockyPool))>></div>
<p class="action-narration">He fights you for two seconds and then he fights you for not enough seconds, and then he's pinned face-down off the edge of the bunk with one of your hands at the back of his neck and your hips locked against his ass.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">get the fuck off me- I swear to- AH-</span></div>
<p class="action-narration">You take him hard and he's loud about it whether he means to be or not. The threats go first, then the syntax, then the consonants.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">fuck you fuck- f-fuck FUCK-</span></div>
<p class="action-narration">He goes tight around you mid-curse and his cheek slides flat against the sheet as he shakes through it.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mphhhhh-</span></div>
<div class="scene-advance"><<linkreplace "Pull out and finish on him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_cum_on'))>></div>
<p class="action-narration is-impact">It lands across the small of his back. He lays there breathing wet against the sheet for a long time without saying anything.</p>
<</linkreplace>></div>
<<elseif _per eq 'horny'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_awake_reverse_cowgirl'))>></div>
<p class="action-narration">He climbs on you faster than you climb on him. Hands everywhere before your suit's halfway off and his mouth picks up the work after that, sloppy and impatient.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">f-fuck I've been on this rock four days I'm done waiting-</span></div>
<p class="action-narration">He swings around and lowers himself onto you backwards, hands braced on your thighs, and starts riding you hard. His back is flushed by the third stroke.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">there- THERE- right fucking there- mhhhh-</span></div>
<div class="scene-advance"><<linkreplace "Let him finish it his way">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_awake_cowgirl'))>></div>
<p class="action-narration">He pivots without taking you out and rides you facing you now, breath fast, hand wrapped around his own cock. He comes on your stomach a few seconds before you come inside him.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">FUCK FUCK F-FUCK- AhHHHhh-</span></div>
<p class="action-narration">He slumps off your hips a second after you do, sweat on his forehead. He leaves it there.</p>
<</linkreplace>></div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_awake_side'))>></div>
<p class="action-narration">He turns onto his side and pulls his knee up to make room for you. You bury yourself in him from behind and he meets you halfway. Tired sex. Two workers on the same quota. The bed was already there.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">mmh.. yeah.. there..</span></div>
<p class="action-narration">He comes quiet, eyes closed, one hand on his own cock and the other tucked under his cheek like he's about to fall back asleep in the middle of you finishing in him.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">..fuck..</span></div>
<div class="scene-advance"><<linkreplace "Finish in him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_creampie'))>></div>
<p class="action-narration is-cold">When you pull out he stays curled where he is. A slow trail runs down the back of his thigh.</p>
<</linkreplace>></div>
<</if>>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Finish and roll off">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</if>>
<<if _pegger and not $slaveShip.state.bunkResolved>>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Peg his ass">>
<<run document.querySelectorAll('#awake-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<if _per eq 'scared'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_act'))>></div>
<p class="action-narration">He works out what the harness is for about a second before you get to him, and the fight goes out of him all at once. You put him on his back and fold his knees up and he lets you, watching the shaft instead of your face, breathing like he's trying to get ahead of it.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">go slow, please, go slow-</span></span></div>
<p class="action-narration">You go at the pace you feel like going at. His cock is hard against his stomach the whole way through and he keeps both hands over his face, and every time you push in properly he makes a sound he clearly wishes he hadn't.</p>
<div class="scene-advance"><<linkreplace "Finish him off with it">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_cum'))>></div>
<p class="action-narration">You get a hand around him without slowing down and he goes off almost immediately, all over his own stomach, still saying please into his palms about nothing in particular.</p>
<</linkreplace>></div>
<<elseif _per eq 'cocky'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_act'))>></div>
<p class="action-narration">He's still running his mouth while you buckle it, right up until you get him turned over and put a hand between his shoulders. Then he's just a man on his front with his face in the mattress finding out what the rest of the sentence was going to be.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">okay- okay wait, wait, <span class="whisper">fuck</span></span></div>
<p class="action-narration">You don't wait. He shuts up around the third stroke and stays shut up, and after a while he stops bracing against it and starts pushing back, which you both notice and neither of you mentions.</p>
<div class="scene-advance"><<linkreplace "Make him ask for it">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_cum'))>></div>
<p class="action-narration">You stop dead and hold there until he says it, and he takes a long ugly moment getting the words out. Then you give it to him properly and he comes on the sheets with his own hand nowhere near it, swearing into the mattress the whole way down.</p>
<</linkreplace>></div>
<<elseif _per eq 'horny'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_act'))>></div>
<p class="action-narration">You barely get it buckled before he's off the bunk and climbing into your lap, and he lines himself up and sinks down onto it without waiting to be told he could. He takes the whole thing on the first drop and swears at the ceiling.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">oh- oh that's it, that's it, <span class="whisper">don't move, let me</span></span></div>
<p class="action-narration">So you let him. He rides it hard enough to rock the bunk against the wall, both hands on your shoulders, working himself on it at a pace nobody asked you to keep up with.</p>
<div class="scene-advance"><<linkreplace "Take his hips and finish it for him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_cum'))>></div>
<p class="action-narration">You get both hands on his hips and take the rhythm off him, and he loses it inside a minute, spilling between you with his forehead down on your shoulder and his whole body shaking through it. *ahh.. ahh.. fuck*</p>
<</linkreplace>></div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_act'))>></div>
<p class="action-narration">He looks at the harness, then at the door, then lies back down and puts an arm over his eyes. Not consent exactly. More that arguing would take energy he stopped having some time ago.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">yeah. fine. <span class="whisper">just get it done</span></span></div>
<p class="action-narration">You take your time anyway. Somewhere in the middle of it the arm comes off his face and his hands end up in the sheets, and by the end he isn't pretending to be somewhere else any more.</p>
<div class="scene-advance"><<linkreplace "Take him the rest of the way">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_cum'))>></div>
<p class="action-narration">He comes without a word and without warning, and lies there afterwards with his chest going, looking mildly annoyed about having enjoyed it.</p>
<</linkreplace>></div>
<</if>>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Unbuckle and leave him there">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</if>>
<<if _rider and not $slaveShip.state.bunkResolved>>
<<ropeOption>>
<div class="scene-advance"><<linkreplace "Ride him">>
<<run document.querySelectorAll('#awake-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<if _per eq 'scared'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">You push him flat with a hand on his sternum and he goes down like he'd been waiting for permission to stop holding himself up. He's hard before you've got your suit down off your hips.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">you don't- you don't have to do this, I already said you could take-</span></div>
<p class="action-narration">You put him inside you anyway and go slow the first few strokes, watching his hands open and close against the sheet. He keeps starting sentences and losing them somewhere around the second word.</p>
<div class="scene-advance"><<linkreplace "Ride it out of him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">You find a rhythm with both palms flat on his chest and he stops trying to talk at all. When he goes it's with his whole body locked underneath you and a sound he clearly hadn't planned on making, and you stay down on him until he's finished.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">ahh- ahh, f-fuck-</span></div>
<p class="action-narration is-cold">Afterwards he lies there looking at the ceiling with his hands still open at his sides.</p>
<</linkreplace>></div>
<<elseif _per eq 'cocky'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">He's still telling you what he's going to do to you when you swing a leg over him and sit down, and the sentence dies halfway through a word. You take him all the way in on the first drop and hold there. He grabs your hips like he's about to lift you off and then just holds on instead.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">get- ghh, get off me, I'm not <span class="whisper">I'm not doing this</span></span></div>
<p class="action-narration">You ride him hard enough that the bunk starts knocking against the bulkhead. Somewhere in there his hands stop pushing and start pulling.</p>
<div class="scene-advance"><<linkreplace "Make him finish first">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">You slow right down when you feel him getting close and he makes a noise like it hurts him. Then you give it back at full pace and he goes off inside you swearing at the ceiling, hips coming up off the mattress hard enough to lift you with them.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">FUCK- fuck, fuck-</span></div>
<p class="action-narration is-cold">He lies back with his forearm over his eyes. He hasn't got anything else to say now.</p>
<</linkreplace>></div>
<<elseif _per eq 'horny'>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">He's got both hands on you before you're even settled, and when you line yourself up he pushes up into you halfway there rather than wait the extra second. You end up doing all the work anyway because he's too far gone to hold a rhythm.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">yeah- yes, fuck, come on, come on-</span></div>
<p class="action-narration">He talks the whole way through it, most of it nonsense, and his hands don't settle anywhere on you for more than a few seconds at a time.</p>
<div class="scene-advance"><<linkreplace "Pin his wrists and take it out of him">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">You put his wrists down flat beside his head and ride him at your own pace until he breaks, and he comes with his back arched right up off the bunk. *ahh- ahhh* You hold him there through all of it.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">I'm- I'm gonna- ahh-</span></div>
<p class="action-narration is-cold">He's still breathing hard when you climb off him, grinning at nothing in particular.</p>
<</linkreplace>></div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">He looks at you, then at the ceiling, then shifts over to make room without being asked. Not enthusiasm. More that arguing would take energy he stopped having a long time ago.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech">yeah. okay. <span class="whisper">go on then</span></span></div>
<p class="action-narration">You take your time with it. He's warm and slow underneath you and somewhere in the middle his hands come up and settle properly on your waist.</p>
<div class="scene-advance"><<linkreplace "Finish it slow">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration">You keep the pace low and steady until he tips over quietly underneath you, both hands gripping your waist, breathing out long and shaky through his teeth.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _sname>></span><span class="speech"><span class="whisper">mmh.. mmh-</span></span></div>
<p class="action-narration is-cold">He stays where he is afterwards with his eyes shut. The ship hums around the both of you.</p>
<</linkreplace>></div>
<</if>>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 12)>>
<<set $slaveShip.state.bunkResolved to true>>
</div>
<div class="scene-advance">
<<link "Climb off and leave him there">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
<</linkreplace>></div>
<</if>>
<div id="awake-outer-choices">
<div class="scene-advance">
<<link "Back off the bunk and leave him sitting">>
<<goto "SlaveShipInterior">>
<</link>>
</div>
</div>
</div>
<</if>><<if not $intruder or $intruder.gender neq 'male' or $intruder.race neq 'white'>>
<<goto "Ship">>
<<else>>
<<run setup.stopAmbient('encounter')>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.4 })>>
<<set _g to ($body and $body.gender) or 'male'>>
<<set _isFem to (_g eq 'female')>>
<<set _isFemboy to (_g eq 'male' and ($player.fem or 0) gte 30)>>
<<set _bodyStatic to _isFem ? 'player_sleeping_f' : (_isFemboy ? 'player_sleeping_femboy' : 'player_sleeping_m')>>
<<set _iname to $intruder.name>>
<div class="ship-header">SHIP INTERIOR — NIGHT</div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_bodyStatic))>></div>
<p class="action-narration">You're under, mostly. The bunk is hard against your back and the ship hums quiet around you. Far enough from the surface that the hatch alarm is the only thing that wakes you sometimes, and it isn't going off now.</p>
<p class="action-narration is-cold">The hatch was unlocked. You left it that way because you don't share this planet with anything except other workers, and other workers don't bother you.</p>
</div>
<div class="scene-advance"><<linkreplace "Continue">>
<<run document.querySelectorAll('#intruder-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<if _isFem>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_touch_lower_f'))>></div>
<<else>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_sleeping_touch'))>></div>
<</if>>
<p class="action-narration">Something settles onto the mattress next to your hip and the whole frame creaks under a second weight. A hand presses flat against your inner thigh and stays there before your brain catches up to the fact that you're not alone.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">shh.. easy.. you keep sleeping that hard and somebody's gonna take advantage..</span></div>
<p class="action-narration is-tense">Low voice, calm, not trying to hide. Another worker. Sounds like a younger one. He came through your hatch and you didn't hear any of it.</p>
</div>
<<if _isFem>>
<div class="scene-advance"><<linkreplace "Open your eyes">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_penetrate_pussy_f'))>></div>
<p class="action-narration">You roll your head and see him. White, lean, suit hanging off his shoulders. His cock is already against you, already lined up, and you watch him push the first inch in before your body even processes that this is happening.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there.. fuck.. you're warmer than I thought you'd be..</span></div>
<p class="action-narration">He sinks the rest of the way in and your back arches against the bunk wall without you choosing it.</p>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _wmFPool to ['slave_awake_anal_f', 'slave_awake_doggy_f', 'slave_awake_fdau_f', 'slave_awake_cowgirl_f', 'slave_awake_pussy_f', 'slave_creampie_pussy_f']>>
<<set _wmFPick to _wmFPool[Math.floor(Math.random() * _wmFPool.length)]>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_wmFPick))>></div>
<p class="action-narration">He works you slow at first and then not, hand splayed on your hip, your back coming up off the mattress every time he bottoms out. Wet noise and the broken sounds you can't keep down.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">a-ah.. ah- AH-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">f-fuck you feel so- mhh-</span></div>
<p class="action-narration is-tense">His rhythm shifts faster, hand tightening on your thigh.</p>
</div>
<div class="scene-advance"><<linkreplace "Let it happen">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _wmFCream to (Math.random() lt 0.5) ? 'slave_creampie_pussy_back_1' : 'slave_creampie_pussy_back_2'>>
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/slave/' + _wmFCream + '.mp4')>></div>
<p class="action-narration is-impact">He locks all the way in and you feel the pulse, and then a second, and your own body goes off around him without permission.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">FUCK F-FUCK- AhHHHhh-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there.. all in..</span></div>
<p class="action-narration">He stays in until he's done, then pulls out slow, and a trail follows him out the second he does.</p>
</div>
<div class="scene-advance"><<linkreplace "Lay there">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('slave_creampie_drip_f'))>></div>
<p class="action-narration is-cold">You hear him zipping back up. Boots on the deck. A pause at your storage rack, then a second pause. Then the hatch sealing behind him on the way out.</p>
<p class="action-narration">You don't move for a long time. The bunk is wet under you and your hip is starting to ache where his hand was.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<if setup.bumpFem>><<run setup.bumpFem(6)>><</if>>
<<run setup.stealCargo and setup.stealCargo(2)>>
<<set $intruder to null>>
</div>
<div class="scene-advance">
<<link "Sit up">>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance"><<linkreplace "Try to move">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_sleeping_finger'))>></div>
<p class="action-narration">You don't get far. His hand catches your wrist and pins it back against the bunk wall while the other one runs down your spine and finds your ass. Two fingers push in slick and your body opens for him before you've finished waking up.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">you've been done like this before.. yeah you have..</span></div>
<p class="action-narration is-tense">He works his fingers a few times and pulls them out, lines up something thicker.</p>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _wmMPool to ['mm_white_awake_doggy', 'mm_white_awake_back', 'mm_white_awake_back_force', 'mm_white_awake_reverse_cowgirl']>>
<<set _wmMPick to _wmMPool[Math.floor(Math.random() * _wmMPool.length)]>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_wmMPick))>></div>
<p class="action-narration">He pushes in and the stretch makes you grunt against the pillow, and then he doesn't wait. His hips slap into your ass in a hard pace from the first thrust and the bunk creaks like it's about to give.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">f-fuck- ah- AH-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">good boy.. take it..</span></div>
<p class="action-narration">He fucks you until the rhythm starts staggering, his weight on your shoulders pinning you flat to the mattress.</p>
</div>
<div class="scene-advance"><<linkreplace "Let it happen">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_creampie'))>></div>
<p class="action-narration is-impact">He buries deep and holds and you feel the first hot pulse inside you, then a second, then a third before he stops counting.</p>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">mphhhhh-</span></div>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">there.. all yours..</span></div>
<p class="action-narration">He pulls out slow and you feel a thick trail follow him out and onto the back of your thigh.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<if setup.bumpFem>><<run setup.bumpFem(6)>><</if>>
<<run setup.stealCargo and setup.stealCargo(2)>>
<<set $intruder to null>>
</div>
<div class="scene-advance"><<linkreplace "Stay down">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('mm_white_creampie_drip'))>></div>
<p class="action-narration is-cold">You hear him zipping back up. Boots on the deck. A pause at your storage rack, then a second pause. Then the hatch sealing behind him on the way out.</p>
<p class="action-narration">You don't move for a long time. Your ass aches in a way that's going to take more than a shower to settle and your sheet is wet under your hip.</p>
</div>
<div class="scene-advance">
<<link "Sit up">>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</if>>
<</linkreplace>></div>
</div>
<</if>><<if not $intruder or $intruder.gender neq 'female'>>
<<goto "Ship">>
<<else>>
<<run setup.stopAmbient('encounter')>>
<<run setup.stopProximityAmbient()>><<run setup.setAmbient('base', 'Sounds/ambient/ship_hum.mp3', { volume: 0.4 })>>
<<set _g to ($body and $body.gender) or 'male'>>
<<set _isFemboy to (_g eq 'male' and ($player.fem or 0) gte 30)>>
<<set _bodyStatic to (_isFemboy ? 'player_sleeping_femboy' : 'player_sleeping_m')>>
<<set _iname to $intruder.name>>
<div class="ship-header">SHIP INTERIOR — NIGHT</div>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_bodyStatic))>></div>
<p class="action-narration">You're under, mostly. The bunk is hard against your back and the ship hums quiet around you.</p>
<p class="action-narration is-cold">The hatch was unlocked. You left it that way because you don't share this planet with anything except other workers, and other workers don't bother you.</p>
</div>
<div class="scene-advance"><<linkreplace "Continue">>
<<run document.querySelectorAll('#intruder-outer-choices').forEach(function(el){ el.style.display='none'; })>>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/slave/intruder_female_sucking_sleeping_male_1.mp4')>></div>
<p class="action-narration">A weight settles onto the bunk by your hip. Warm. Lighter than you'd expect. A hand settles on the front of your suit and works the zipper down, and then a wet heat closes around the head of your cock before you've decided to be awake.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">mhh.. there.. don't make me work for it..</span></div>
<p class="action-narration is-tense">Female voice. Low and amused. She started without asking and you can already feel how much of you is in her mouth.</p>
</div>
<div class="scene-advance"><<linkreplace "Open your eyes">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag('Images/media/slave/slave_awake_bj_1.mp4')>></div>
<p class="action-narration">You roll your head and see her. White, naked, dark hair down. She catches your eye without taking her mouth off you and pulls back slow until just the tip's between her lips, then sinks all the way back down.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">mh- yeah- I knew you'd be a quiet one-</span></div>
<p class="action-narration">She doesn't wait for you to say anything. She swings a leg over your hip and lines herself up against you before you've sat up.</p>
</div>
<div class="scene-advance"><<linkreplace "Let her ride">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<<set _fIntrPool to ['female_on_male_cowgirl_vag', 'female_on_male_cowgirl_vag', 'female_on_male_cowgirl_anal']>>
<<set _fIntrPick to _fIntrPool[Math.floor(Math.random() * _fIntrPool.length)]>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_fIntrPick))>></div>
<p class="action-narration">She sinks down on you in one slow motion and her hands brace on your chest as she starts moving. Hard, steady, hips slapping back into yours, tits bouncing loose above you.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">f-fuck.. there.. THERE-</span></div>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">a-ah- ah-</span></div>
<p class="action-narration is-tense">Her rhythm gets faster and shallower and your hands grab her hips.</p>
</div>
<div class="scene-advance"><<linkreplace "Let it happen">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('female_on_male_cowgirl_vag'))>></div>
<p class="action-narration is-impact">She locks tight around you and you finish inside her in three pulses while she's still grinding down on you, her thighs shaking against your hips.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _iname>></span><span class="speech">FUCK- mhhhh- yeah-</span></div>
<div class="npc-line is-slave"><span class="speaker">You</span><span class="speech">mphhhhh-</span></div>
<p class="action-narration">She stays on top of you for a long minute, breath ragged, then slides off and onto her side next to you.</p>
<<set $player.lust to 0>>
<<set $player.energy to Math.max(0, $player.energy - 10)>>
<<run setup.stealCargo and setup.stealCargo(2)>>
<<set $intruder to null>>
</div>
<div class="scene-advance"><<linkreplace "Lay there">>
<<run document.querySelectorAll('.intruder-step-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<p class="action-narration is-cold">She wipes herself off on your sheet and gets up. Boots on the deck. A pause at your storage rack, then a second pause. Then the hatch sealing behind her on the way out.</p>
<p class="action-narration">You stare at the ceiling for a while. The sheet is wet under your hip and there's lipstick on your suit collar that wasn't there when you went to bed.</p>
</div>
<div class="scene-advance">
<<link "Sit up">>
<<goto "Ship">>
<</link>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<</if>><<if not $containment or not $containment.trap>><<goto "PlanetSurface">><<else>>
<<run setup.stopAmbient('encounter')>>
<<set _t to $containment.trap>>
<<roomImage "ship_interior">>
<p class="action-narration is-impact"><<if _t.source eq "storage">>CLANG.<<else>>CLUNK.<</if>></p>
<div id="gas-banner"><<print setup.machineGasBannerHtml()>></div>
<div class="ship-actions">
<div class="disabled-action"><span class="action-label">Strain against the cuffs</span><span class="action-hint">they hold fast</span></div>
<div class="disabled-action"><span class="action-label">Throw yourself at the hatch</span><span class="action-hint">bolted shut</span></div>
<div class="disabled-action"><span class="action-label">Reach the ceiling vent</span><span class="action-hint">out of reach</span></div>
<div class="disabled-action"><span class="action-label">Hold your breath</span><span class="action-hint">already breathed it in</span></div>
</div>
<<done>>
<<run setup.containmentInjectFog()>>
<</done>>
<<repeat 1s>>
<<set _r to setup.machineTrapTick()>>
<<if _r is "ko">>
<<goto "ContainmentKO">>
<<else>>
<<replace "#gas-banner">><<print setup.machineGasBannerHtml()>><</replace>>
<<run setup.machineBumpFog()>>
<</if>>
<</repeat>>
<</if>><<if not $containment>><<goto "PlanetSurface">><<else>>
<<run setup.stopAmbient('encounter')>>
<<run setup.playSound('slam', { volume: 0.4 })>>
<div class="npc-scene">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.koMedia('beat'))>></div>
<p class="action-narration is-cold">The cuffs don't give. The hatch doesn't move. The pink keeps coming and your knees go first, then your arms, then the part of you that was still trying.</p>
<p class="action-narration is-impact">Then nothing.</p>
</div>
<div class="scene-advance">
<<link "...">><<goto "ContainmentCaught">><</link>>
</div>
</div>
<</if>><<if not $containment>><<goto "PlanetSurface">><<else>>
<<run setup.stopAmbient('encounter')>>
<<set _tier to setup.machineTier()>>
<<set _occ to ($containment.trap and $containment.trap.occupant) or setup.containmentOccupant()>>
<<set _scene to setup.machineSceneMedia({ tier: _tier })>>
<<if _scene.stripPlug>><<run setup.machineStripPlug()>><</if>>
<<set _hole to _scene.hole>>
<<set _occM to setup.machineOccupantMedia(_occ)>>
<<set _name to (_occ ? _occ.name : "")>>
<div class="npc-scene is-slave">
<div class="npc-scene-step">
<p class="action-narration is-cold">You come back in pieces. The hum first. Then the cold of the straps. Then the part where none of it moves when you tell it to.</p>
<div class="npc-scene-media"><<print setup.mediaTag(_scene.path)>></div>
<<if _scene.stripPlug>>
<p class="action-narration">The rig finds the plug first. There's a click and a tug and then it's gone, popped out and dropped somewhere you can't see, and the arm slots itself in where the plug was before you've even finished flinching.</p>
<</if>>
<<if _hole eq "pussy">>
<p class="action-narration">The arm's buried in your pussy and pumping, in and out, in and out, not fast, just steady and endless, and your hips are already moving with it whether you decided to or not. *shlk* *shlk* *shlk*</p>
<<elseif _hole eq "cock">>
<p class="action-narration">There's a sleeve clamped down over your cock and it's milking you, tight and slick and relentless. It's going to pull it out of you on its own schedule.</p>
<<elseif _hole eq "mouth">>
<p class="action-narration">There's an arm at your mouth fucking your throat in time with everything else, and every time you gag it doesn't ease up, it just waits half a second and goes again. *gkh* *gkh*</p>
<<elseif _hole eq "tits">>
<p class="action-narration">Cups have sealed over your nipples and the machine's drawing on them, pull and release, pull and release, and lower down a second arm is working you in time with it so you can't tell which end is winding you tighter.</p>
<<else>>
<p class="action-narration">The arm's working your ass open on a timer, in and out, in and out, not asking, and your body gave up arguing about it a minute before your head did. *shlk* *shlk* *shlk*</p>
<</if>>
</div>
<div class="scene-advance"><<linkreplace "Take it">>
<div class="npc-scene-step">
<<if _occ and _occM>>
<div class="npc-scene-media"><<print setup.mediaTag(_occM.path)>></div>
<<if _occM.who eq "male">>
<p class="action-narration"><<print _name>> came around when the alarm did and he doesn't wait his turn. He gets a grip on you and uses you while the rig's still running, one more thing happening to a body that's stopped keeping track of what's in it.</p>
<p class="action-narration is-cold">*shlk* *gkh* *shlk*</p>
<<else>>
<p class="action-narration"><<print _name>>'s awake and she's done watching. She climbs over you and sinks down, riding you with the straps holding you exactly where she wants while the rig keeps its own rhythm below.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _name>></span><span class="speech">mhh.. yeah.. stay right there..</span></div>
<</if>>
<<elseif _occ>>
<p class="action-narration is-tense"><<print _name>>'s awake, sat up on the console with her chin in her hand, watching the machine do all the work and thumbing the speed up a notch every time you start to flag.</p>
<<else>>
<p class="action-narration">There's nobody to stop it and nobody it's waiting on. The cabin does this on its own, patient as a machine gets, working you past the point where you're fighting it and well into the part where your body just goes along.</p>
<</if>>
<<if _tier gte 2 and _tier lt 3>>
<p class="action-narration is-cold">A screen on the bulkhead is counting something down. RESISTANCE, and a number under it, and the number drops a little every time you stop fighting and let it work. You watch it fall for a while. Then you stop watching it.</p>
<</if>>
</div>
<div class="scene-advance"><<linkreplace "...">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.koMedia('after'))>></div>
<<if _tier gte 3>>
<p class="action-narration is-impact">It doesn't stop when you finish. It keeps going.</p>
<p class="action-narration">By the time the straps let up you've lost the thread of how long it's been. There's a row of numbers stamped fresh on your hip that you didn't put there, still stinging, like the ship filed you under something on its way out. You don't remember the last hour of it and your body's been emptied so many times it stopped keeping count.</p>
<p class="action-narration is-cold">When you come around for real you're face down on the floor of your own ship with no memory of the walk back and most of a day gone.</p>
<<else>>
<p class="action-narration">When the straps finally let go you slide off the rig and don't catch yourself, and you lie there in the mess of it a while, wrung out and leaking, breathing through whatever it left in you.</p>
<p class="action-narration is-cold">Nobody comes to check. The vents shut off. The cabin goes quiet like none of it happened.</p>
<</if>>
</div>
<div class="scene-advance">
<<if _tier gte 3>>
<<link "Wake up">>
<<run setup.machineApplyOutcome()>>
<<goto "DreadShipWake">>
<</link>>
<<else>>
<<link "Peel yourself off it">>
<<set _res to setup.machineApplyOutcome()>>
<<if _res.badEnd>><<goto "DreadShipWake">><<else>><<goto "PlanetSurface">><</if>>
<</link>>
<</if>>
</div>
<</linkreplace>></div>
<</linkreplace>></div>
</div>
<</if>>
<<set _pick to ($snakeScene || setup.snakeApplyLossOutcome())>>
<div class="bee-aggro-root is-snake">
<div class="bee-aggro-title">YOU STOP FIGHTING IT</div>
<div class="scene-beat is-snake">
<div class="scene-media-wrap">
<<print setup.mediaTag(setup.pickMedia(_pick.pool))>>
</div>
<div class="scene-prose">
Your knees hit the sand and it's hot straight through the suit and you stay down there. Something heavy pours across your legs and up over your hips and keeps coming, and you can feel every coil of it settle and tighten and you don't do anything about it, because doing something would take more than you've got left in you. <<print setup.snakeLossLine(_pick.unplugged ? 'unplug' : _pick.hole)>> Your mouth hangs open and you breathe through it and the only thing in your head is how warm the whole arrangement is.
</div>
</div>
<<print setup.snakeAftermathHtml()>>
<div class="bee-aggro-end is-snake">
<<link '<span class="action-label">Get up out of the sand</span>'>>
<<run setup.snakeClearStatus(true)>>
<<if $player>><<set $player.lust to 0>><</if>>
<<run setup.passTime(45)>>
<<goto "PlanetSurface">>
<</link>>
</div>
</div>
<<if not $snakeFight or not $snakeFight.active>>
The sand's flat and still. Whatever was here has gone back under it.
<br><br>
<<link "Back">><<goto "PlanetSurface">><</link>>
<<else>>
<div class="kb-root">
<div class="kb-stage-wrap">
<canvas class="kb-stage" width="960" height="540"></canvas>
<div class="kb-slap hidden"><img src="" alt=""></div>
</div>
<div class="kb-hud">
<div class="kb-controls">
<button class="kb-btn is-attack" data-kb="attack"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_attack.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ATTACK','yellow')>></span></button>
<button class="kb-btn kb-seduce is-seduce" data-kb="seduce"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/heart_pink.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('SEDUCE','pink')>></span></button>
<button class="kb-btn kb-guard is-guard" data-kb="guard"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_guard.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('GUARD','white')>></span></button>
<button class="kb-btn kb-items is-items" data-kb="items"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_items.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ITEMS','green')>></span></button>
</div>
<div class="kb-item-menu hidden">
<button class="kb-item-chip" data-kb-item="medkit"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_medkit.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('MEDKIT','white')>></span><b data-kb-cnt="medkit">x0</b></button>
<button class="kb-item-chip" data-kb-item="cucumber"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_cucumber.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('CUCUMBER','green')>></span><b data-kb-cnt="cucumber">x0</b></button>
</div>
<div class="kb-log">Something moves in the sand.</div>
</div>
</div>
<<done>><<run setup.snakeBattleStart()>><</done>>
<</if>>
<<if not $guardFight or not $guardFight.active>>
The lane's quiet again. Whatever happened here is over.
<br><br>
<<link "Back">><<goto "Bazaar">><</link>>
<<else>>
<div class="kb-root">
<div class="kb-stage-wrap">
<canvas class="kb-stage" width="960" height="540"></canvas>
<div class="kb-slap hidden"><img src="" alt=""></div>
</div>
<div class="kb-hud">
<div class="kb-controls">
<button class="kb-btn is-attack" data-kb="attack"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_attack.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ATTACK','yellow')>></span></button>
<button class="kb-btn kb-seduce is-seduce" data-kb="seduce"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/heart_pink.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('SEDUCE','pink')>></span></button>
<button class="kb-btn kb-guard is-guard" data-kb="guard"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_guard.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('GUARD','white')>></span></button>
<button class="kb-btn kb-items is-items" data-kb="items"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_items.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ITEMS','green')>></span></button>
</div>
<div class="kb-item-menu hidden">
<button class="kb-item-chip" data-kb-item="medkit"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_medkit.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('MEDKIT','white')>></span><b data-kb-cnt="medkit">x0</b></button>
<button class="kb-item-chip" data-kb-item="cucumber"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_cucumber.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('CUCUMBER','green')>></span><b data-kb-cnt="cucumber">x0</b></button>
</div>
<div class="kb-log">Two of them come off the wall with their swords already out.</div>
</div>
</div>
<<done>><<run setup.guardBattleStart()>><</done>>
<</if>><<if not $kappaFight or not $kappaFight.active>>
The water's already still. Nothing left to fight.
<br><br>
<<link "Back">><<goto "PlanetSurface">><</link>>
<<else>>
<div class="kb-root">
<div class="kb-stage-wrap">
<canvas class="kb-stage" width="960" height="540"></canvas>
<div class="kb-slap hidden"><img src="" alt=""></div>
</div>
<div class="kb-hud">
<div class="kb-controls">
<button class="kb-btn is-attack" data-kb="attack"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_attack.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ATTACK','yellow')>></span></button>
<button class="kb-btn kb-seduce is-seduce" data-kb="seduce"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/heart_pink.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('SEDUCE','pink')>></span></button>
<button class="kb-btn kb-guard is-guard" data-kb="guard"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_guard.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('GUARD','white')>></span></button>
<button class="kb-btn kb-items is-items" data-kb="items"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/ic_items.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('ITEMS','green')>></span></button>
</div>
<div class="kb-item-menu hidden">
<button class="kb-item-chip" data-kb-item="medkit"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_medkit.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('MEDKIT','white')>></span><b data-kb-cnt="medkit">x0</b></button>
<button class="kb-item-chip" data-kb-item="cucumber"><span class="kb-plate"></span><span class="kb-ic"><img src="Images/combat/ui/item_cucumber.png" alt=""></span><span class="kb-lab"><<= setup.kbGlyphs('CUCUMBER','green')>></span><b data-kb-cnt="cucumber">x0</b></button>
</div>
<div class="kb-log">It came up out of the reeds and it's between you and the way back.</div>
</div>
</div>
<<done>><<run setup.kappaBattleStart()>><</done>>
<</if>>
<<run setup.ensureQasim()>>
<<run setup.ensureTrade()>>
<div class="ship-header">QASIM — THE EXCHANGE</div>
<div id="qasim-wrap"><<= setup.qasimBody()>></div>
<<done>>
<<script>>
setup.qxDrawWires();
setup.qxWatchLayout();
<</script>>
<</done>>
<br>
<div class="ship-actions">
<div class="ship-action">
<<link '<span class="action-label">Step back from the table</span><span class="action-hint">Anything of yours on it comes with you</span>'>>
<<run setup.qasimLeave()>>
<<goto "Bazaar">>
<</link>>
</div>
</div>
<<set _gDest to $giftReturn || "Ship">>
<<if not $giftScene or not $companion>>
<<goto _gDest>>
<<else>>
<<set _gs to $giftScene>>
<<set _giftPlay to (_gs.kind eq 'keep' and setup.companionHeldToy($companion) and (($player.lust or 0) gte 40 or ($companion.lust or 0) gte 40))>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<p class="action-narration"><<print _gs.open>></p>
<div class="npc-line is-comp"><span class="speaker"><<print $companion.name>></span><span class="speech"><<print _gs.say>></span></div>
<<if _gs.clip>>
<div class="npc-scene-media"><<print setup.mediaTag(_gs.clip)>></div>
<</if>>
<p class="action-narration is-cold"><<print _gs.close>></p>
<div id="gift-after">
<<if _giftPlay>>
<<set _acts to setup.companionSexActs($companion)>>
<<if _acts.length>>
<p class="action-narration">She sets the toy down within reach and looks at you, still wound up and waiting to see what you do about it. Your move.</p>
<<for _ai, _act range _acts>>
<<capture _act>>
<<if _act.off>>
<div class="scene-advance is-off"><span class="sa-label"><<print _act.label>></span><span class="sa-why"><<print _act.off>></span></div>
<<else>>
<div class="scene-advance"><<link _act.label>><<set $sexScene to _act>><<set $sexToy to null>><<set $sexReturn to _gDest>><<goto "CompanionSexAct">><</link>></div>
<</if>>
<</capture>>
<</for>>
<</if>>
<</if>>
<div class="scene-advance is-keep"><<link "Leave them to it">><<set $giftScene to null>><<goto _gDest>><</link>></div>
</div>
</div></div>
<</if>>
<<set _gDest to $sexReturn || $giftReturn || "Ship">>
<<if not $sexScene or not $companion>>
<<goto _gDest>>
<<else>>
<<set _sx to $sexScene>>
<<set _unplug to (_sx.anal ? setup.companionAnalUnplug($companion, $sexToy) : null)>>
<<if _unplug and _unplug.worn>>
<<run (function(){ var sv=State.variables, c=sv.companion, d=(setup.getItemDef('buttplug')||{}); if(c && c.gear && c.gear.plug){ if(sv.ship && Array.isArray(sv.ship.storage)) sv.ship.storage.push({id:'buttplug', name:((c.gear.plug.name)||d.name||'Buttplug'), value:d.baseValue||0}); c.gear.plug=null; } })()>>
<</if>>
<<run setup.hapAt && setup.hapAt('fuck')>>
<div class="npc-scene is-comp"><div class="npc-scene-step">
<<if _unplug>>
<<set _rmClip to setup.pickFrom(_unplug.pool)>>
<<if _rmClip>><div class="npc-scene-media"><<print setup.mediaTag(_rmClip)>></div><</if>>
<p class="action-narration"><<print setup.companionUnplugLine($companion, _unplug)>></p>
<</if>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickFrom(_sx.pool))>></div>
<p class="action-narration"><<print _sx.line>></p>
<div id="sex-finish">
<div class="scene-advance"><<link "Finish">><<replace "#sex-finish">>
<<if _sx.cum>>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickFrom(_sx.cum))>></div>
<</if>>
<p class="action-narration is-cold"><<print _sx.after>></p>
<<run setup.companionSexResolve($companion, _sx.id)>>
<<if $sexToy>><<run setup.companionSpendToyCharge($companion)>><</if>>
<<run setup.hapFinish && setup.hapFinish('cum')>>
<div class="scene-advance is-keep"><<link "Get your breath back">><<set $sexScene to null>><<set $giftScene to null>><<set $sexReturn to null>><<set $sexToy to null>><<run setup.hapOff && setup.hapOff()>><<goto _gDest>><</link>></div>
<</replace>><</link>></div>
</div>
</div></div>
<</if>><<set _c to $companion>>
<<set _cname to (_c and _c.name) or 'she'>>
<<set _male to setup.companionGender(_c) eq 'male'>>
<<set _himher to _male ? 'him' : 'her'>>
<<set _heshe to _male ? 'he' : 'she'>>
<<set _gagged to !!($player.gear and $player.gear.gag)>>
<div class="npc-scene">
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(setup.companionHandPool(_c)))>></div>
<p class="action-narration">The hatch is open because <<print _heshe>> didn't expect you back this early, and <<print _heshe>>'s far enough along that noticing you costs <<print _himher>> a second longer than it should.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">..don't. don't do the face.</span></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> doesn't stop.</p>
</div>
<div class="scene-advance" id="hand-choice-fingers"><<linkreplace "Put your hand there instead">>
<<run document.querySelectorAll('#hand-choice-mouth').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(setup.companionFingerPool(_c)))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> moves <<print _himher>>self out of the way for you without being asked, and inside a minute <<print _heshe>>'s got a fistful of the blanket and no more opinions about your face.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">there- no, there, don't- mmh-</span></div>
<p class="action-narration">It doesn't take long. <<print _heshe.toUpperFirst()>> was most of the way there before you walked in and <<print _heshe>> goes with your wrist held still against <<print _himher>> like <<print _heshe>>'s worried you'll pull it back.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">nnh- nnnh-</span></div>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> lets go of your wrist eventually and doesn't move away.</p>
<<set _rideAct to _male ? 'm_ride' : 'ride'>>
<<set _actIds to setup.companionSexActs(_c).map(function(a){ return a.id; })>>
<<set _rideOk to _actIds.indexOf(_rideAct) >= 0>>
<<set _will to setup.companionWillingness(_c, _rideAct)>>
<<set _wants to (_will.level eq 'willing') or (_will.level eq 'eager')>>
<<run setup.companionHandReliefResolve(true)>>
</div>
<<if not _rideOk>>
<<if _wants>>
<div class="scene-advance"><<linkreplace "Ask what <<= _heshe>>'d rather do about the cage">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_male ? 'shared_male_strapon_recv' : 'shared_female_strapon_wear'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> looks at the cage longer than they need to and then gets off the bunk without answering, and you hear <<print _himher>> going through <<print _himher>> kit behind you.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">you're not the only one who packed for a long trip.</span></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> buckles it on standing up and takes <<print _himher>> time over the straps while you watch.</p>
<div class="scene-advance"><<linkreplace "Turn over for <<= _himher>>">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_caged'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> takes the pace <<print _heshe>> was already using on <<print _himher>>self and puts it into you instead, and the cage stays exactly as full and as useless as it was when <<print _heshe>> started.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">there. there we go. that's better, isn't it-</span></div>
<p class="action-narration">You don't finish, because you can't. <<print _heshe.toUpperFirst()>> does, at some point in there, with a hand braced flat between your shoulders.</p>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> leaves the cage alone the whole way through.</p>
<<run setup.companionBond(3, 'cage answer')>>
<<run setup.advanceMinutes(15)>>
<<run document.querySelectorAll('.hand-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="scene-advance"><<link "Get up eventually">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Ask about the cage</span><span class="sa-why"><<print _will.line>></span></div>
<</if>>
<<elseif _rideOk and _wants>>
<div class="scene-advance"><<linkreplace "Let <<= _himher>> climb on">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_male ? 'shared_male_partner_ride' : 'shared_female_partner_ride'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>>'s not finished, and <<print _heshe>> doesn't ask. <<print _heshe.toUpperFirst()>> gets a knee either side of you and takes over the whole thing, and you let <<print _himher>>.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">stay- stay right there, I've got it-</span></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> uses you exactly as long as <<print _heshe>> wants to and finishes the second time harder than the first, forehead down against your shoulder, still moving after <<print _heshe>>'s stopped making noise.</p>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> stays there a while.</p>
<<run setup.companionBond(3, 'let her take it')>>
<<run setup.advanceMinutes(15)>>
</div>
<<run document.querySelectorAll('.hand-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="scene-advance"><<link "Get up eventually">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
<<elseif _rideOk>>
<div class="scene-advance is-off"><span class="sa-label">Let <<= _himher>> climb on</span><span class="sa-why"><<print _will.line>></span></div>
<</if>>
<div class="scene-advance hand-exit"><<link "Leave <<= _himher>> to it">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
<<if not _gagged>>
<div class="scene-advance" id="hand-choice-mouth"><<linkreplace "Get your mouth on <<= _himher>>">>
<<run document.querySelectorAll('#hand-choice-fingers').forEach(function(el){ el.style.display='none'; })>>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(setup.companionMouthPool(_c)))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> gets one hand into your hair on the way down and forgets to be embarrassed about being caught somewhere in the first thirty seconds.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">oh- oh that's- you don't have to-</span></div>
<p class="action-narration">You do it anyway and <<print _heshe>> stops arguing. <<print _heshe.toUpperFirst()>> finishes with <<print _himher>> heel hooked behind your shoulder and your name somewhere in the noise.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">f-fuck- fuck-</span></div>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> lies there a moment looking at the ceiling like it owes <<print _himher>> money, and then <<print _heshe>> looks at you instead.</p>
<<set _rideAct to _male ? 'm_ride' : 'ride'>>
<<set _actIds to setup.companionSexActs(_c).map(function(a){ return a.id; })>>
<<set _rideOk to _actIds.indexOf(_rideAct) >= 0>>
<<set _will to setup.companionWillingness(_c, _rideAct)>>
<<set _wants to (_will.level eq 'willing') or (_will.level eq 'eager')>>
<<run setup.companionHandReliefResolve(true)>>
</div>
<<if not _rideOk>>
<<if _wants>>
<div class="scene-advance"><<linkreplace "Ask what <<= _heshe>>'d rather do about the cage">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_male ? 'shared_male_strapon_recv' : 'shared_female_strapon_wear'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> looks at the cage longer than they need to and then gets off the bunk without answering, and you hear <<print _himher>> going through <<print _himher>> kit behind you.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">you're not the only one who packed for a long trip.</span></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> buckles it on standing up and takes <<print _himher>> time over the straps while you watch.</p>
<div class="scene-advance"><<linkreplace "Turn over for <<= _himher>>">>
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia('shared_male_strapon_recv_caged'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> takes the pace <<print _heshe>> was already using on <<print _himher>>self and puts it into you instead, and the cage stays exactly as full and as useless as it was when <<print _heshe>> started.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">there. there we go. that's better, isn't it-</span></div>
<p class="action-narration">You don't finish, because you can't. <<print _heshe.toUpperFirst()>> does, at some point in there, with a hand braced flat between your shoulders.</p>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> leaves the cage alone the whole way through.</p>
<<run setup.companionBond(3, 'cage answer')>>
<<run setup.advanceMinutes(15)>>
<<run document.querySelectorAll('.hand-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="scene-advance"><<link "Get up eventually">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
</div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Ask about the cage</span><span class="sa-why"><<print _will.line>></span></div>
<</if>>
<<elseif _rideOk and _wants>>
<div class="scene-advance"><<linkreplace "Let <<= _himher>> climb on">>
<div class="npc-scene-step">
<div class="npc-scene-media"><<print setup.mediaTag(setup.pickMedia(_male ? 'shared_male_partner_ride' : 'shared_female_partner_ride'))>></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>>'s not finished, and <<print _heshe>> doesn't ask. <<print _heshe.toUpperFirst()>> gets a knee either side of you and takes over the whole thing, and you let <<print _himher>>.</p>
<div class="npc-line is-slave"><span class="speaker"><<print _cname>></span><span class="speech">stay- stay right there, I've got it-</span></div>
<p class="action-narration"><<print _heshe.toUpperFirst()>> uses you exactly as long as <<print _heshe>> wants to and finishes the second time harder than the first, forehead down against your shoulder, still moving after <<print _heshe>>'s stopped making noise.</p>
<p class="action-narration is-cold"><<print _heshe.toUpperFirst()>> stays there a while.</p>
<<run setup.companionBond(3, 'let her take it')>>
<<run setup.advanceMinutes(15)>>
</div>
<<run document.querySelectorAll('.hand-exit').forEach(function(el){ el.style.display='none'; })>>
<div class="scene-advance"><<link "Get up eventually">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
<<elseif _rideOk>>
<div class="scene-advance is-off"><span class="sa-label">Let <<= _himher>> climb on</span><span class="sa-why"><<print _will.line>></span></div>
<</if>>
<div class="scene-advance hand-exit"><<link "Leave <<= _himher>> to it">><<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>><</link>></div>
<</linkreplace>></div>
<<else>>
<div class="scene-advance is-off"><span class="sa-label">Get your mouth on <<= _himher>></span><span class="sa-why">not through the gag</span></div>
<</if>>
<div class="scene-advance">
<<link "Back out and pull the hatch to">>
<<run setup.companionHandReliefIgnore()>>
<<goto `$ship.upgraded ? "SleepingQuarters" : "Ship"`>>
<</link>>
</div>
</div>